使用下面的代码,我试图打印通过Arduino序列接收的值。但是价值会被打印两次。并且打印值中的一个始终为0.
byte b;
int i;
void setup() {
Serial.begin(115200);
Serial.setTimeout(10);
}
void loop() {
while(Serial.available() == 0) {}
i = Serial.parseInt();
Serial.println(i);
}
EXAMPLE: value sent is 15
Serial monitor output: 15
0
EXAMPLE: value sent is 99
Serial monitor output: 99
0
答案 0 :(得分:4)
这是因为第一个i = Serial.parseInt();
打印读取值并将0返回到i
变量,这意味着该值已成功打印。
在第二个Serial.println(i);
上,您只需打印i
值,即0。
答案 1 :(得分:1)
我假设您从串行监视器发送换行符。
这是您的代码中发生的事情。
15\n
。Serial.parseInt()
从串行缓冲区中读取1
和5
,并在\n
处停止。然后它返回15
。\n
仍在缓冲区中,Serial.parseInt()
会再次被调用。Serial.parseInt()
会丢弃串行缓冲区中的任何非数字字符,直到找到数字字符。\n
并等待数字字符。Serial.parseInt()
超时并返回0
。如果您想阻止第二次Serial.parseInt()
调用,您应该发送不带换行符的字符串或清空串行缓冲区,如下所示:
void loop() {
while(Serial.available() == 0) {}
i = Serial.parseInt();
Serial.println(i);
while(Serial.available() > 0) Serial.read(); // empty the serial buffer by reading everything from it
}