Arduino串口指令问题:如何设置传感器循环默认开启
解决Arduino串口控制传感器默认开启的问题
要实现传感器默认开启、仅收到off指令时停止的功能,核心是引入状态变量控制传感器逻辑执行,同时避免阻塞程序的延迟操作。以下是修改后的代码及关键说明:
修改后的完整代码
String command; int ledPin = 13; int sensorPin = 4; bool sensorEnabled = true; // 默认开启传感器 unsigned long previousMillis = 0; const long delayInterval = 1000; // 替换delay的非阻塞间隔 void checkSensor() { bool val = digitalRead(sensorPin); if (val == LOW) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); // 用millis()实现非阻塞延迟,避免卡住串口响应 unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= delayInterval) { previousMillis = currentMillis; } } } void setup() { pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); Serial.begin(9600); delay(2000); Serial.println("Sensor is running by default. Send 'off' to stop, 'on' to resume."); } void loop() { // 优先处理串口指令 if (Serial.available()) { command = Serial.readString(); command.trim(); command.toLowerCase(); Serial.println(command); if (command.equals("on")) { sensorEnabled = true; Serial.println("Sensor resumed."); } else if (command.equals("off")) { sensorEnabled = false; digitalWrite(ledPin, LOW); Serial.println("Sensor stopped."); } } // 根据状态变量决定是否运行传感器逻辑 if (sensorEnabled) { checkSensor(); } }
关键改动说明
- 状态变量控制:新增
sensorEnabled并默认设为true,传感器逻辑会持续执行直到收到off指令将其置为false,收到on则恢复开启。 - 移除阻塞延迟:原代码中的
delay(1000)会导致程序完全卡住,无法及时响应串口指令。改用millis()实现非阻塞延迟,保证串口通信始终顺畅。 - 持续执行传感器逻辑:原代码仅在收到
on时执行一次传感器检测,修改后只要sensorEnabled为true,就会在loop()循环中持续检测传感器状态。 - 优化提示信息:启动提示明确告知默认状态和可用指令,提升使用体验。
内容的提问来源于stack exchange,提问作者jelacksmith626
相关产品推荐
相关产品推荐

