弘毅 发表于 2012-6-27 20:00:47

一个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);
}
}正确的实验结果如下图:



┏ωǒ┛菰独 发表于 2012-6-27 20:04:43

占楼先:lol

Muller_r 发表于 2012-6-27 20:05:00

支持 = = 为什么我有一种被当小白鼠的感觉

风轻云淡 发表于 2012-6-27 20:05:13

沙发坐了。谢谢分享

┏ωǒ┛菰独 发表于 2012-6-27 20:05:53

风轻云淡 发表于 2012-6-27 20:05 static/image/common/back.gif
沙发坐了。谢谢分享

少年 你手慢了

迷你强 发表于 2012-6-27 21:02:45

沙发早没了。只剩底板了。。

cosailer 发表于 2012-6-27 22:13:31

本帖最后由 cosailer 于 2012-6-27 22:15 编辑

我觉得最好还是用byte吧,串口数据传的都是byte,然后再CAST到相应的数据类型

公孙林 发表于 2012-6-27 23:06:36

话说我开始也遇到这个问题了

风轻云淡 发表于 2012-6-28 08:39:04

┏ωǒ┛菰独 发表于 2012-6-27 20:05 static/image/common/back.gif
少年 你手慢了

怎么会这样呢,明明是我先回了呢.:L

attomgame 发表于 2012-6-28 11:32:25

太爱这种剖析疑难杂症的帖子了

highplay86 发表于 2012-8-3 22:28:25

原来如此...

ninjiafan 发表于 2012-9-25 20:45:58

汗...我也是没注意这个问题...幸好对ASCII码比较熟悉,一看就知道是类型错了...

chylove 发表于 2013-4-23 22:14:37

好贴!!!!

lane3000 发表于 2013-4-24 20:34:00

今天开始玩ARDUINO的串口,也遇到这个问题了~感谢释疑~

玄冰之神 发表于 2013-4-27 15:58:31

:lol:lol:lol谢谢分享
页: [1] 2
查看完整版本: 一个Arduino串口实验问题分析