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);
}
///----------------------------------------------------------