终于解决了数据包验证问题,不用开机拔掉703N串口通讯线了。。真正意义上兼容论坛提供的上位机程序。(小声说一句:论坛提供的arduino下位机程序,有一个很小很小的问题,在我的arduino uno R3上测试通不过。花了三天仔细测试,终于解决了。)
代码分享:
- // motor A
- int dir1PinA = 13;
- int dir2PinA = 12;
- int speedPinA = 10;
- // motor B
- int dir1PinB = 9;
- int dir2PinB = 8;
- int speedPinB = 6;
- int LED = 13;
- int speed;
- int dir;
- int buffer[3];
- int Serial_flag;
- int date_index=0;
- void setup()
- {
- pinMode(dir1PinA,OUTPUT);
- pinMode(dir2PinA,OUTPUT);
- pinMode(speedPinA,OUTPUT);
- pinMode(dir1PinB,OUTPUT);
- pinMode(dir2PinB,OUTPUT);
- pinMode(speedPinB,OUTPUT);
- pinMode(LED,OUTPUT);
- Serial.begin(9600); // 打开串口,设置波特率为9600 bps
-
-
- speed = 0;
- dir = 1;
- }
- void MOTOA(int speed,int dir)
- {
- analogWrite(speedPinA,speed);
- if (dir == 1)
-
- {
- digitalWrite(dir1PinA,LOW);
- digitalWrite(dir2PinA,HIGH);
- }
- else
- {
- digitalWrite(dir1PinA,LOW);
- digitalWrite(dir2PinA,LOW);
-
- }
- }
- void MOTOB(int speed,int dir)
- {
- analogWrite(speedPinB,speed);
- if (dir == 1)
-
- {
- digitalWrite(dir1PinB,LOW);
- digitalWrite(dir2PinB,HIGH);
- }
- else
- {
- digitalWrite(dir1PinB,LOW);
- digitalWrite(dir2PinB,LOW);
-
- }
- }
- void MOTOBACK(int speed)
- {
- analogWrite(speedPinB,speed);
- analogWrite(speedPinA,speed);
- digitalWrite(dir1PinB,HIGH);
- digitalWrite(dir2PinB,LOW);
- digitalWrite(dir1PinA,HIGH);
- digitalWrite(dir2PinA,LOW);
-
- }
- void Communication_Decode()
- {
- if(buffer[0]==0x00)
- {
- switch(buffer[1])
- {
- case 0x01: MOTOA(150,1);MOTOB(0,0);return;
- case 0x02: MOTOA(0,0); MOTOB(150,1); return;
- case 0x03: MOTOBACK(200); return;
- case 0x04:
- MOTOA(220,1);
- MOTOB(220,1);
- return;
- case 0x00:
- MOTOA(0,0);
- MOTOB(0,0);
- return;
- }
- }
- }
- void loop()
- {
- int temp_char;
-
-
-
- while(Serial.available() > 0)
- {
- temp_char = Serial.read();
- if(temp_char!=-1)
- {
-
- if(Serial_flag==0)
- {
- if(temp_char==0xff)
- {
- Serial_flag = 1;
- }
- }
- else
- {
- if(temp_char==0xff)
- {
- Serial_flag = 0;
-
- if(date_index==3)
- {
- Communication_Decode();
- }
- date_index = 0;
- }
- else
- {
- buffer[date_index]=temp_char;
- Serial.println(buffer[date_index],HEX);
- date_index++;
- }
- }
- }
- }
- }
复制代码 |