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

Arduino新手求助:基于Digital I/O controls的双输入控制双输出逻辑实现

嘿,作为同样从兴趣入坑Arduino的过来人,我完全懂你这种卡壳的感觉!先把你提到的需求逻辑整理清楚(猜你大概率是inputA=LOW时,不管inputB是什么状态,两个输出都设为LOW?如果不是你可以随时调整逻辑),然后给你一套清晰的解决方案:

需求逻辑明确

  • 当 inputA=HIGH 且 inputB=HIGH → outputA=HIGH,outputB=LOW
  • 当 inputA=HIGH 且 inputB=LOW → outputA=HIGH,outputB=HIGH
  • 当 inputA=LOW(无论inputB状态)→ outputA=LOW,outputB=LOW

可能踩坑的点&解决方案

很多新手卡在这里,要么是引脚模式没设对,要么是没考虑输入抖动,或者逻辑判断写绕了。直接给你可运行的代码,关键地方我都标了注释:

// 先定义你实际用到的引脚号,别和硬件接线搞混!
const int inputA = 2;
const int inputB = 3;
const int outputA = 8;
const int outputB = 9;

void setup() {
  // 输入引脚设置:如果是按键,用INPUT_PULLUP省得接外部电阻,状态是反的(按下=LOW)
  // 要是接的是其他传感器,直接改成INPUT就行
  pinMode(inputA, INPUT_PULLUP);
  pinMode(inputB, INPUT_PULLUP);
  
  // 输出引脚必须设为OUTPUT
  pinMode(outputA, OUTPUT);
  pinMode(outputB, OUTPUT);
  
  // 可选:打开串口用来排查输入状态,方便调试
  Serial.begin(9600);
}

void loop() {
  // 读取两个输入的状态
  bool stateA = digitalRead(inputA);
  bool stateB = digitalRead(inputB);
  
  // 串口打印状态,方便你确认读取的数值对不对(调试完可以删掉)
  Serial.print("Input A: ");
  Serial.print(stateA);
  Serial.print(" | Input B: ");
  Serial.println(stateB);

  // 按照你的逻辑控制输出
  if (stateA == HIGH) {
    digitalWrite(outputA, HIGH); // inputA为高时,outputA始终是高
    // 根据inputB的状态切换outputB
    digitalWrite(outputB, (stateB == HIGH) ? LOW : HIGH);
  } else {
    // inputA为低时,两个输出都关闭
    digitalWrite(outputA, LOW);
    digitalWrite(outputB, LOW);
  }

  // 防抖延迟:如果是按键输入,加50ms延迟避免抖动导致误触发
  delay(50);
}

调试小技巧

如果还是不对,按这个步骤排查:

  1. 先测输入:用串口打印确认stateA和stateB的数值和你实际输入的状态一致,比如接按键的话,按下是不是显示LOW(用INPUT_PULLUP的情况)
  2. 再测输出:单独给outputA和outputB写digitalWrite(outputA, HIGH);,看硬件有没有反应,排除接线松了的问题
  3. 简化逻辑:先写个简单的测试代码,比如inputA高就亮outputA,确认基础功能没问题,再叠加复杂逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:07