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函数 }