通过串口(蓝牙WiFi)与Arduino通信

char BTCOM;                           //定义串口接收的参数值
int ledpin = A0;                      //定义LED在A2引脚
unsigned char Uart_i = 0;
unsigned char Uartbuffer[5];          //定义一个储存指令的数组

/*                 FF 00 00 00 FF  关灯
  Uartbuffer[X] x= 0  1  2  3  4
                   FF 00 01 00 FF  开灯
*/

void Analysis_uartdata()              //定义一个串口指令解析函数
{
  switch (Uartbuffer[1])              //Uartbuffer[1]为表达式,如果与case的值相等则执行case下的代码
  {
    case 0x00:
      if (Uartbuffer[2] == 0x00)      //判断Uartbuffer[2]是否为00
      {
        digitalWrite(ledpin, LOW);    //置低电平,关闭LED灯
        Serial.println("Turn Off The Led");
      }
      else if (Uartbuffer[2] == 0x01) //判断Uartbuffer[2]是否为01
      {
        digitalWrite(ledpin, HIGH);   //置高电平,打开LED灯
        Serial.println("Turn On The Led");
      }
      break;
    default:
      {
        Serial.println("Input Error!");
      }
  }
}
void serialport()
{
  if (Serial.available() > 0)                   //判断串口缓冲器是否有数据装入
  {
    Uartbuffer[Uart_i++] = Serial.read();       //读取串口,暂存数据
    if (Uart_i == 5)                            //去除包头包尾,获取到中间数据为3个字节,说明此命令格式正确
    {
      Serial.println("Correct format");
      Uart_i = 0;
      if ((Uartbuffer[0] == 0xFF) & (Uartbuffer[4] == 0xFF))  //判断包头包尾是否满足
      {
        Serial.println("open Analysis_uartdata");
        Analysis_uartdata();                                   //执行指令解析函数
      }
    }
  }
}

//初始化
void setup()
{
  pinMode(ledpin, OUTPUT);            //设置LED引脚为输出模式
  digitalWrite(A0, LOW);              //设置A0引脚初始电压为低电平
  Serial.begin(9600);                 //开启串行通信接口并设置通信波特率为9600
}

//主函数
void loop()
{
  serialport();                          //调用serialport函数
}

 

posted @ 2020-03-28 10:57  清酒伴歌谣  阅读(828)  评论(0编辑  收藏  举报