Part 4: Controlling the Wi-Fi Car via Amarino
The following is the code you will need to follow Part 4 of the Wi-Fi Car tutorial series.
code_4_1
//wifi-car video tutorial //code_4_1 // //created 2012 //by Nille //via amarino char accelBuff[100]; //定义接收数组用来存放手机发送的加速度传感器参数 int accelDot[2]; //存放数据中的小数点位于accelBuff中的位置,小数点的十六进制为2e int accelSemi; //存放数据中的分号位于accelBuff中的位置,分号的十六进制为3b int i; void setup() { Serial.begin(9600); pinMode(4, OUTPUT); //M1 pinMode(5, OUTPUT); //E1 pinMode(6, OUTPUT); //E2 pinMode(7, OUTPUT); //M2 } void loop() { //接收数据 if(Serial.available()) { accelBuff[0] = Serial.read(); //read //amarino发送的数据包含一个标志A if(accelBuff[0] == 'A') { //开始接收数据,数据以0x13结束 i=1; while(1) { if(Serial.available()) { accelBuff[i] = Serial.read(); //read if(accelBuff[i] == 0x13) break; else i++; } } //接收数据结束 } //获取接收数据中分号的位置 for(i = 0 ; i < 100 ; i++) { if(accelBuff[i] == 0x3b) { accelSemi= i; break; } } //获取接收数据中小数点的位置 for(i = 0;i < 100;i++) { if(accelBuff[i] == 0x2e) { accelDot[0]= i; break; } } for(i = accelSemi;i < 100;i++) { if(accelBuff[i] == 0x2e) { accelDot[1]= i; break; } } //////////////////////////////// //根据接收到的数据控制小车的运动 //////////////////////////////// //首先让小车停止 digitalWrite(5, LOW); digitalWrite(6, LOW); Serial.println("STOP"); //通过Y轴数据的正负判端前进还是后退 if(accelBuff[accelSemi+1] == '-') { if(accelDot[1] == accelSemi+4 || (accelBuff[accelSemi+2]-0X30) > 1) { Serial.println("forward"); digitalWrite(4, HIGH); digitalWrite(7, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } } else { if(accelDot[1] == accelSemi+3 || (accelBuff[accelSemi+1]-0X30) > 1) { Serial.println("back"); digitalWrite(4, LOW); digitalWrite(7, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } } //通过X轴数据的正负判断作转还是右转 ///////////////////////////////////////////////////// if(accelBuff[1] == '-') { if(accelDot[0] == 4 || (accelBuff[2]-0X30) > 1) { Serial.println("right"); digitalWrite(4, LOW); digitalWrite(7, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } } else { if(accelDot[0] == 3 || (accelBuff[1]-0X30) > 1) { Serial.println("left"); digitalWrite(4, HIGH); digitalWrite(7, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } } } }