2

最初に私の目標を説明するために、UDP (User Datagram Protocol)プロトコルを使用して、ロボットを前進、後退、右左、停止するように制御しようとしています。

  • 私は使用しています
    • Arduino ミニ Atmega168
    • ラン ENC28J60
    • ルーター Tp-Link 150Mbps ワイヤレス N ナノ
    • モータードライバー L293D
  • および C# のアプリケーションで、進む、戻る、左、右、および停止ボタンを使用

    arduinoのIPアドレスは192.168.178.60問題なくそのアドレスにpingを実行していますが、ボタンをより速くクリックして制御したり、任意のボタンをクリックしたりして、ブロックをブロックしたり、ブロックしたままにしたりするために、より多くの時間を残そうとすると、 arduinoを再起動して、ping を元に戻します。主な問題は、接続がすぐに失われる理由です。

これが私のコードです

#include "EtherShield.h"
//8 or 16 bit integer
uint8_t mymac[6] = {0xCF,0x70,0x7C,0xE4,0x8A,0xB8};
uint8_t myip[4] = {192,168,178,60};
uint16_t MYWWWPORT = 80; 

#define BUFFER_SIZE 750

static uint8_t buf[BUFFER_SIZE+1];

EtherShield es=EtherShield();

uint16_t dat_p;

///----------------------------------------------------------
void setup(){

Setup_Pins();
es.ES_enc28j60Init(mymac);
es.ES_init_ip_arp_udp_tcp(mymac,myip, MYWWWPORT);

} 


///----------------------------------------------------------

void loop(){

// read packet, handle ping and wait for a tcp packet:
buf[IP_PROTO_P]=0;
dat_p=es.ES_packetloop_icmp_tcp(buf,es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf));

if (buf[IP_PROTO_P]==IP_PROTO_UDP_V){
    Motor_Control();
    buf[IP_PROTO_P]=0;
    }
} 


//----------------------------------------------------------

void Setup_Pins(){

    pinMode(4, OUTPUT); digitalWrite(4, 0);//lev
    pinMode(5, OUTPUT); digitalWrite(5, 0);//lev
    pinMode(6, OUTPUT); digitalWrite(6, 0);//desen
    pinMode(7, OUTPUT); digitalWrite(7, 0);//desen

} 

///----------------------------------------------------------

void Motor_Control(){

    char* recv = (char*)buf + 42;

// forward


    if (strncmp(recv, "forward", 7) == 0) { 
                    digitalWrite(4, 0);
                    digitalWrite(5, 1);
                    digitalWrite(6, 0);
                    digitalWrite(7, 1);
    }

//left


    if (strncmp(recv, "left", 4) == 0) { 
                    digitalWrite(4, 1);
                    digitalWrite(5, 0);
                    digitalWrite(6, 0);
                    digitalWrite(7, 1);
    }

//stop



    if (strncmp(recv, "stop", 4) == 0) { 
                    digitalWrite(4, 0);
                    digitalWrite(5, 0);
                    digitalWrite(6, 0);
                    digitalWrite(7, 0);
    }

//right


    if (strncmp(recv, "right", 5) == 0) { 
                    digitalWrite(4, 0);
                    digitalWrite(5, 1);
                    digitalWrite(6, 1);
                    digitalWrite(7, 0);
    }

//back


    if (strncmp(recv, "back", 4) == 0) { 
                    digitalWrite(4, 1);
                    digitalWrite(5, 0);
                    digitalWrite(6, 1);
                    digitalWrite(7, 0);
    }
        delay(6);

} 


///----------------------------------------------------------
4

1 に答える 1

0

あなたのネットワーク スタックはわかりませんが、 UDPトラフィックES_packetloop_icmp_tcpで動作するようには思えません。ICMP および/または TCP パケットを処理すると思います。ICMP は共通コマンドで使用されるパケットのタイプであり、ICMP はUDP と同じではありません。ping

編集:これは、始めるのに役立つかもしれません。

于 2013-07-03T13:05:11.310 に答える