问题描述
我试图从串行读取一些整数,所以我使用 Serial.parseInt() 读取两个值(0 或 1),问题是代码第一次完美运行,但随后串行开始读取值 0 本身,没有我发送任何东西,这是我使用的代码的一部分:
while (!Serial.available()) {}
A = Serial.parseInt();
Serial.println(A);
if (A == 1) {
Book = "";
Serial.println("add tag");
while (Book == "") {
delay(2000);
Book = tagB();
}
Serial.println(Book);
sendToE1("",Book);
delay(2000);
}
}
}
解决方法
Serial.parseInt
在超时且未收到字符或收到无效字符时返回 0
。
当您调用 Serial.parseInt
之前,循环正在等待可用数据,唯一的解释是您正在发送除数字之外的其他内容。很可能是终端程序或 println 函数的换行或回车...
在调用 Serial.peek
之前,您可能应该调用 Serial.parseInt
来检查下一个字节是否为数字。如果您确定除了那个单个整数和一些非数字字符之外没有发送任何内容,您还可以在解析可能的下一个整数之前清除输入缓冲区。
但是如果您要发送一个整数和一个终止字符,您最好不要使用 Serial.parseInt
。将数据读入数组,直到收到终止字符。然后自己将数据转换为整数。
仅当您知道将在特定时间间隔内收到整数表示时,才使用 Serial.parseInt
。
您可能需要将显示器设置为“无行尾”。