You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:39:02