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