如何修改代码实现3个触控/开关传感器任意触发即可控制继电器开关
多传感器控制继电器修改方案
核心调整思路
- 新增2个触控传感器、1个实体开关的引脚定义
- 调整触发判定逻辑:只要三个输入设备任意一个触发,就执行继电器状态切换
- 保留原有消抖、继电器控制逻辑,兼容性更高
修改后完整代码
// 引脚定义,可根据实际接线调整编号 int touchPin1 = 2; int touchPin2 = 4; int entitySwitchPin = 5; int relayPin = 3; int val = 0; int lastTriggerState = 0; int relayOn = 0; void setup() { Serial.begin(9600); // 初始化三个输入引脚 pinMode(touchPin1, INPUT); pinMode(touchPin2, INPUT); pinMode(entitySwitchPin, INPUT); pinMode(relayPin, OUTPUT); } void loop() { // 读取三个引脚状态,任意一个为高电平则判定为触发 int state1 = digitalRead(touchPin1); int state2 = digitalRead(touchPin2); int state3 = digitalRead(entitySwitchPin); val = (state1 == HIGH || state2 == HIGH || state3 == HIGH) ? HIGH : LOW; // 消抖+沿触发判定,避免长按重复切换 if(val == HIGH && lastTriggerState == LOW){ relayOn = 1 - relayOn; delay(100); } lastTriggerState = val; // 继电器控制逻辑 if(relayOn == HIGH){ Serial.println("Light ON"); digitalWrite(relayPin, LOW); }else{ Serial.println("Light OFF"); digitalWrite(relayPin, HIGH); } delay(100); }
关键修改说明
- 引脚定义部分:将原单输入引脚扩展为3个输入引脚,适配2个触控传感器+1个实体开关的需求,引脚编号可根据你实际的接线情况自行调整
- 输入初始化部分:新增2个触控引脚、1个实体开关引脚的
INPUT模式配置 - 触发判定部分:分别读取三个输入引脚的电平,只要任意一个输出高电平就判定为触发信号,原有切换逻辑不需要调整
- 如果你使用的实体开关默认是高电平、按下为低电平触发,只需要把电平判断条件里的
HIGH换成LOW即可
内容的提问来源于stack exchange,提问作者Filip GG
相关产品推荐
相关产品推荐

