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); }
调试小技巧
如果还是不对,按这个步骤排查:
- 先测输入:用串口打印确认
stateA和stateB的数值和你实际输入的状态一致,比如接按键的话,按下是不是显示LOW(用INPUT_PULLUP的情况) - 再测输出:单独给outputA和outputB写
digitalWrite(outputA, HIGH);,看硬件有没有反应,排除接线松了的问题 - 简化逻辑:先写个简单的测试代码,比如inputA高就亮outputA,确认基础功能没问题,再叠加复杂逻辑
内容的提问来源于stack exchange,提问作者William Hitchcock
相关产品推荐
相关产品推荐

