Arduino串口监视器输入单词长度校验异常:非9位恒报错问题
问题根因
- 你使用的
Serial.readString()默认携带1秒超时逻辑,不需要等你输入完成,只要串口缓冲区短时间内没有新数据传入,就会直接返回当前已经读到的零散内容,大部分情况下你还没输完9个字符,程序就已经完成读取,拿到的字符串长度自然不符合要求。 - 代码没有设置明确的输入完成标识,Arduino无法判断你什么时候完成了一次单词输入,只能实时读取缓冲区现有内容,必然会频繁触发错误逻辑。
修复方案
采用串口监视器自带的行结束符作为输入完成的判定标记,是成本最低、稳定性最高的方案,修改后的代码如下:
void setup() { Serial.begin(9600); Serial.println("Checksum"); } void loop() { // 仅当串口有数据传入时才执行读取逻辑 if (Serial.available() > 0) { // 读到换行符为止,代表用户完成一次输入 String s = Serial.readStringUntil('\n'); // 去除字符串末尾可能带的回车符、空白符 s.trim(); if (s.length() == 9) { for (int i = 0; i < 9; i++) { Serial.print(s[i]); Serial.println(" "); Serial.print((byte)s[i], HEX); Serial.println(" "); Serial.println(" "); Serial.println(); } Serial.println("Ok"); } else { Serial.println("Error"); } } }
使用说明
- 打开Arduino IDE的串口监视器,将右下角的「行结束符」选项调整为「换行符」
- 输入内容后点击发送,串口会自动携带换行符作为输入结束标记,程序只有识别到换行符后才会读取完整的输入内容做长度判断
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

