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版本之后有什么函数实现这个功能吗?或者用什么方法清空缓冲区? 谢谢了! |
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); } } |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed