0){ digitalWrite(23, LOW);-6ren">
gpt4 book ai didi

c++ - 用毫秒替换延迟

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:41 26 4
gpt4 key购买 nike

我只需要使 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);

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

最佳答案

我假设,当字符串变量 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
}

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

关于c++ - 用毫秒替换延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43832180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com