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

Arduino串口读取问题:输入1无法点亮13引脚LED求排查

Arduino串口控制LED故障排查

问题分析

你的代码存在两个核心问题,导致输入"1"时LED无法点亮:

1. loop循环强制反复熄灭LED

loop()函数的第一行是digitalWrite(13,LOW);,这会让Arduino每一次循环都把LED引脚拉低。哪怕你刚通过串口判断把LED设为HIGH,下一次循环执行时这行代码会立刻关闭LED,导致你根本看不到点亮的状态。

2. 串口输入的隐藏字符导致匹配失败

Serial.readStringUntil('\n')会读取到换行符前的所有内容,但串口监视器默认发送输入时,除了你输入的"1",还会附带回车符(\r)(不同系统的换行设置可能是\r\n或\n)。此时command的实际内容是"1\r",和你判断的"1"完全不相等,所以永远触发不了点亮逻辑。

另外,setup()里的command = "1"; command += "0";属于冗余代码,后续串口读取会直接覆盖这个值,完全没必要保留。

修正后的代码

String command;
void setup(){
    Serial.begin(9600);
    command.reserve(5);
    pinMode(13, OUTPUT);
    digitalWrite(13, LOW); // 初始状态熄灭LED,仅执行一次
}

void loop(){
    if(Serial.available()){
        command = Serial.readStringUntil('\n');
        command.trim(); // 自动去除首尾的回车、换行、空格等空白字符
        
        if(command.equals("1")){
            digitalWrite(13, HIGH);
        }
        else if(command.equals("0")){
            digitalWrite(13, LOW);
        }
        else{
            Serial.println("incorrect"); // 匹配需求输出错误提示
        }
    }
}

修正说明

  • 将初始熄灭LED的代码移到setup()中,只执行一次,避免loop循环反复干扰LED状态
  • 添加command.trim(),处理串口输入时附带的隐藏空白字符,确保字符串匹配精准
  • 移除了setup()中冗余的字符串初始化代码
  • 将错误提示改为需求要求的"incorrect"

内容的提问来源于stack exchange,提问作者Alsadek Alkhayer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:24:17