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

我的Arduino程序中if语句不生效,求排查问题并修正其他代码错误

BattleBots竞技场启动序列代码修正

原代码存在的问题

  • 变量冗余:重复定义了按钮引脚变量pinButton/pinButton2,counter、val变量定义后未使用
  • 结构错误:Arduino框架已内置main函数,无需自行定义,原有逻辑写在自定义main函数中完全不会执行,且loop函数仅读取按钮状态无任何业务逻辑
  • 作用域错误:按钮状态变量buttonState/buttonState2是loop函数内的局部变量,函数外无法访问
  • 语法错误:if判断后多写了分号导致判断失效,自定义main函数缺少开头大括号
  • 硬件兼容问题:按钮引脚设为INPUT模式无上下拉电阻时会浮空,状态读取不稳定;PWM最大值为255,原代码写的225属于笔误

修正后完整代码

// 按钮引脚定义
const int buttonPin = 13;
const int buttonPin2 = 3;

// 第一个RGB LED引脚
const int redpin = 11;
const int bluepin = 10;
const int greenpin = 9;

// 第二个RGB LED引脚
const int redpin2 = 7;
const int bluepin2 = 6;
const int greenpin2 =5;

void setup() {
  // 按钮设为上拉输入,外接按钮接GND即可,无需额外电阻
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);
  // LED引脚设为输出
  pinMode(redpin, OUTPUT);
  pinMode(bluepin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  pinMode(redpin2, OUTPUT);
  pinMode(bluepin2, OUTPUT);
  pinMode(greenpin2, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  // 读取两个按钮状态
  int buttonState = digitalRead(buttonPin);
  int buttonState2 = digitalRead(buttonPin2);

  // 两个按钮同时按下(LOW)时,两个LED亮蓝色
  if (buttonState == LOW && buttonState2 == LOW) {
    analogWrite(redpin, 0);
    analogWrite(bluepin, 255);
    analogWrite(greenpin, 0);

    analogWrite(redpin2, 0);
    analogWrite(bluepin2, 255);
    analogWrite(greenpin2, 0);
  } else {
    // 不同时按下时,第一个亮红色,第二个亮绿色
    analogWrite(redpin, 255);
    analogWrite(bluepin, 0);
    analogWrite(greenpin, 0);

    analogWrite(redpin2, 0);
    analogWrite(bluepin2, 0);
    analogWrite(greenpin2, 255);
  }
  delay(10);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:21:01