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