Serial.print()函数怎么会这样??-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14435|回复: 8

[已解决] Serial.print()函数怎么会这样??

[复制链接]
发表于 2013-5-6 14:30 | 显示全部楼层 |阅读模式
下面是我写的程序,当我在串口监视窗口输入abc时,为什么结果会是下图右边的样子呢?
QQ截图20130506142758.png
发表于 2013-5-6 15:30 | 显示全部楼层
可以使用结束符来判断字符串是否输入结束,结束再输出
 楼主| 发表于 2013-5-6 16:31 | 显示全部楼层
不太明白,能说具体点吗
发表于 2013-5-6 20:24 | 显示全部楼层
while(Serial.available() > 0)  
    {   for(int i=1;i<=b;i++)
       { comdata =comdata+char(Serial.read());
     delay(10);}
参考这个 将 if换成while,后面增加delay(10),10这个需要调整,本程序通过上机测试
完整的在这。。。。
String comdata = "";
void setup()
{
    Serial.begin(9600);
}
void loop()
{   int b=Serial.available();
    while(Serial.available() > 0)  
    {   for(int i=1;i<=b;i++)
       { comdata =comdata+char(Serial.read());
     delay(10);}
      
    }
    if (comdata.length() > 0)
    {
        Serial.println(comdata);
        comdata = "";
    }
}
 楼主| 发表于 2013-5-7 08:27 | 显示全部楼层
顶楼上!
但是我想知道为什么我的程序的执行结果会是那样的?
发表于 2013-5-13 11:16 | 显示全部楼层
本帖最后由 fangtaonj 于 2013-5-13 11:17 编辑

你这个代码很好理解,你有两个串口打印语句,每个字符就输出两次,第一个是println(),第一行就是a回车,第二个输出a的是print()不回车,所以第二个a再加上第一个b后才又遇到println(),有回车,所以第二行是ab回车,第三行及以后类似第二行。每个大循环都让comdata=""所以不会输出为”abc“。
 楼主| 发表于 2013-5-13 15:19 | 显示全部楼层
fangtaonj 发表于 2013-5-13 11:16
你这个代码很好理解,你有两个串口打印语句,每个字符就输出两次,第一个是println(),第一行就是a回车,第 ...

楼上的说的好像很有道理,我可不可以这样理解:我输入的是abc,串口每次都只读一个字符,当读完第一个字符第二个字符没读到的时候就开始执行if循环了;当第二次执行loop循环时串口已经读到了第二个字符,但是第三个字符还是没读到,在第二次执行if循环与第三次执行if循环之间第三个字符才被读到。
不知道我这样理解对不对。
发表于 2013-5-13 19:46 | 显示全部楼层
liuweiwei 发表于 2013-5-13 15:19
楼上的说的好像很有道理,我可不可以这样理解:我输入的是abc,串口每次都只读一个字符,当读完第一个字 ...

没错是这样的!
 楼主| 发表于 2013-5-13 19:48 | 显示全部楼层
fangtaonj 发表于 2013-5-13 19:46
没错是这样的!

谢谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-3 05:39 , Processed in 0.076158 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表