【问题标题】:Replace delay with millis用毫秒替换延迟
【发布时间】:2017-05-07 13:39:41
【问题描述】:

我只需要让一个 LED 闪烁 100 毫秒,循环中的延迟功能使我的代码非常无响应。

if (readString.indexOf("?23") >0){
  digitalWrite(23, LOW);
  delay(100);
  digitalWrite(23, HIGH);
}

有没有一种简单的方法可以将delay 替换为millis 只闪烁一次?这个我试过了,还是不行

unsigned long interval1=1000;    // the time we need to wait
unsigned long previousMillis1=0; // millis() returns an unsigned long.

if (readString.indexOf("?22") >0){
  if ((unsigned long)(millis() - previousMillis1) >= interval1) {
    previousMillis1 = millis();
    digitalWrite(22, LOW);
  }
  digitalWrite(22, HIGH);

你们能帮帮我吗?我想不通。

【问题讨论】:

  • 你能编辑并包含完整的loop()函数吗?
  • C++11 的std::condition_variables 有方法在指定的时间段内等待条件变量,可以以毫秒为单位指定。
  • 你在做 C 还是 C++?
  • 谢谢你们! Josef 循环具有相同的代码,但用于 15 个继电器。
  • 我使用 C 而不是 C++

标签: c++ arduino


【解决方案1】:

我假设,当字符串变量 readString 包含定义的文字字符串时,您尝试打开 LED 100 毫秒,然后将其关闭。

我认为您的代码中缺少else,因为没有它,用于关闭 LED 的 digitalWrite(22, LOW) 将直接跟随 digitalWrite(22, HIGH),这将再次打开 LED。通过执行previousMillis1 = millis(),您可以让 LED 连续闪烁,而不仅仅是一次。 试试这样的:

unsigned long interval1=100;    // the time we need to wait
unsigned long previousMillis1=0; // millis() returns an unsigned long.
boolean led_blinking = false;

void loop(){
    if (readString.indexOf("?22") >0 && !led_blinking){
        led_blinking = true;
        previousMillis1 = millis();
    }
    if (led_blinking && millis() - previousMillis1 <= interval1) {
        digitalWrite(22, HIGH);
    } else {
        digitalWrite(22, LOW);
        led_blinking = false;
        readString = ""; /* resetting the string variable to prevent
                            further blinking, until the variable is set
                            by another part of the code */
    }

    // Do other task of the main loop
}

请注意,根据执行主循环其余部分所需的时间,此处的时间并不准确。但是,如果您只想对自己的状况有一个视觉标志,这就足够了。 如果您不想重置字符串变量,您可以使用另一个布尔变量,您可以在设置字符串变量时设置该变量。但是不要忘记重置它而不是字符串变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2020-04-05
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    相关资源
    最近更新 更多