2014-9-28 21:00:02 [显示全部楼层]
7754浏览
查看: 7754|回复: 3

[讨论] 求助帖,有几个关于串口的问题,先谢谢了

[复制链接]
某本书上的一个实例,代码如下:
……
……
if(Serial.available()>0){
   delay(100);
   int numChar=Serial.available();
……}
……
……
书中原话如下:
如果在串口监视器中输入的字符串是:R255,G255,B255  ,那么numChar的值将是17,而不是16,因为在文本的每行末端都有一个看不见的字符,叫做NULL字符,他告诉Arduino什么时候到达文本行的末端。

为了验证上述结论,我写了下面的代码:

int x;
void setup(){
  Serial.begin(9600);
  Serial.flush();
}
void loop(){
  if(Serial.available()>0){
    delay(100);
    x=Serial.available();
    Serial.println(x);
  }
}

运行后在串口监视器里输入R255,G255,B255 ,返回的值却是15。


至此,我想问如下几个问题:
1.图中红字处的17和16是如何理解而得出的?我一直想不明白。R255,G255,B255我认为是14个字节,加上文本行末端的NULL,也才15个字节,如何出来的16和17呢?
2.我写的用于验证的代码有效吗?通过我写的代码得到的值和我自己的理解是一致的,可是和书中的结论不同。
3.关于Serial.flush()函数,1.0版本之前是清空串口缓冲区数据,1.0版本之后有什么函数实现这个功能吗?或者用什么方法清空缓冲区?


谢谢了!

张浩华  初级技师

发表于 2014-9-29 10:22:08

什么书,哪一页,能不能发个地址??
第一,我选择了一下你上面的代码,上面是两个空格,下面你测试的是1个空格。。
第二,如果发消息的工具不一样,或者方式不一样,比如println方法会在消息结尾加一个换行符,可能这就是文中说的“看不见的字符”,这也是一个字符,会被计为长度。。
回复

使用道具 举报

Leotower  中级技师

发表于 2014-9-30 09:45:10

1、请问这是什么书?
2、我使用的1.5版本,Arduino的串口工具不会发送回车换行
3、Arduino的serrial是有接收缓存的,若ram < 1000 bytes, 则缓存为15bytes, 否则为64bytes
4、建议使用下面的代码测试,可以看到读入的数据,便于分析
void loop(){
  if(Serial.available()>0){
    delay(100);
    x=Serial.available();
    Serial.print(x);
    Serial.print(":" );
    Serial.println(Serial.read(), HEX);
  }
}
回复

使用道具 举报

星辰大海://。,  中级技师

发表于 2022-9-11 15:45:10

是的,版本是什么。。。。。
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail