关于串口接收格式化数据的问题
本帖最后由 lqh 于 2016-1-9 17:38 编辑纵观论坛,讲用Arduino发送数据的多,用Arduino接收数据的少,可供初学者学习接收格式化数据的资料就更少。但在实际工作中,很多初学者经常会用Arduino接收格式化数据,以便控制各类终端。比如,用电脑串口发送一个数据去控制灯的亮度等等,看起来好象很简单,其实操作起来并不容易,这是因为串口传输的数据都是ASCII码,初学者很难掌握。本着共同学习、共同提高的宗旨,本人把今天学习理解的拿出来,供初学者参考。
int value=0;//控制灯亮度的值,应在0-255之间;
void setup()
{
Serial.begin(9600);
}
void loop() {
if(Serial.available()){
char ch=Serial.read(); //接收到一个字节,且为ASCII,切记
if(isDigit(ch)){ //判断接收的字节是否为0-9的数字
value=value*10+(ch-'0');//如果ch代表字符1,因为它的ASCII为49,0的ASCII为48,所以49-48正好等于1,即它本身;
} //这样就把ASCII码转换过来了;
else if(ch==70){ //"F"的ASCII为70,作为输入数据的结束
Serial.println(value);
}
else if(ch==69){ //"E"的ASCII为69,作为输入数据的开始
value=0;
}
}
analogWrite(13,value);//将输入的数据控制引脚的指示灯亮度
}
好了,在电脑中输入“E123F”、“E12F”、“E3F”等,看看LED灯有什么变化。
//analogWrite(13,value);//将输入的数据控制引脚的指示灯亮度 //
有兩點意見:
1) 要小心輸出腳,D13 不是每一種板也可以作 analgoWrite 的
2) 此句放在以下位置感覺會比較好
else if(ch==70){ //"F"的ASCII为70,作为输入数据的结束
Serial.println(value);
analogWrite(9,value);//将输入的数据控制引脚的指示灯亮度
}
学习一下~
一直没有整理清楚这个方面的事情
页:
[1]