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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:27:12