kaixin9983 发表于 2014-9-28 21:00:02

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

某本书上的一个实例,代码如下:
……
……
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

是的,版本是什么。。。。。
页: [1]
查看完整版本: 求助帖,有几个关于串口的问题,先谢谢了