2013-07-01 46 views
2

首先解釋一下我的目標,我想控制我的機器人去前進,後退,左,右,用UDP (用戶數據報協議)協議Arduino的UDP平

  • 我停止「M使用
    • Arduino的贈送Atmega168的
    • 蘭ENC28J60
    • 路由器TP-LINK 150Mbps的無線N納米
    • 電機驅動器L293D
  • ,並在C#中的按鈕前,後應用,左,右和停止

    Arduino的IP地址爲192.168.178.60我查驗,如果我沒有問題地址,但嘗試點擊更快的按鈕來控制或點擊任何按鈕,並讓它更多的時間例如前進它阻止或離開它塊,我必須重新啓動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); 

} 


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

回答

0

我不知道你的網絡堆棧,但ES_packetloop_icmp_tcp聽起來並不像它會在UDP交通工作。我會假設它處理ICMP和/或TCP數據包。 ICMP是公用的ping命令使用的數據包的類型,ICMP是而不是與UDP相同。

編輯:也許this幫助您入門。