一个Arduino串口实验问题分析
某童鞋给Arduino写了一个代码,目标是通过电脑上串口给Arduino发送数据,然后让Arduino再返回来相同的值,然后显示在串口监视器中。以下是刚开始的代码void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available()>0)
{
int data=Serial.read();
Serial.println(data);
delay(1000);
}
}
但是在串口监视器中输入1,结果返回结果是49~~而不是想要的1。如下图
原因是因为,在串口监视器中输入的数值是字符串,而代码中,int data=Serial.read();对串口读取回来的字符串数据,强行定义为int数值,在ASCII表中,1的DEC值刚好就是49,也就是。。。显示了1的DEC值。
这段代码只需要把int data=Serial.read();更改为char data=Serial.read();就可以了。
下面是正确代码,感谢elitezhe童鞋提供的解决方法。。。
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available()>0)
{
char data=Serial.read();
Serial.println(data);
delay(1000);
}
}正确的实验结果如下图:
占楼先:lol 支持 = = 为什么我有一种被当小白鼠的感觉 沙发坐了。谢谢分享 风轻云淡 发表于 2012-6-27 20:05 static/image/common/back.gif
沙发坐了。谢谢分享
少年 你手慢了 沙发早没了。只剩底板了。。 本帖最后由 cosailer 于 2012-6-27 22:15 编辑
我觉得最好还是用byte吧,串口数据传的都是byte,然后再CAST到相应的数据类型 话说我开始也遇到这个问题了 ┏ωǒ┛菰独 发表于 2012-6-27 20:05 static/image/common/back.gif
少年 你手慢了
怎么会这样呢,明明是我先回了呢.:L 太爱这种剖析疑难杂症的帖子了 原来如此... 汗...我也是没注意这个问题...幸好对ASCII码比较熟悉,一看就知道是类型错了... 好贴!!!! 今天开始玩ARDUINO的串口,也遇到这个问题了~感谢释疑~ :lol:lol:lol谢谢分享
页:
[1]
2