远离延迟
组件和用品
| × | 1 | ||||
| × | 2 |
关于这个项目
该视频的灵感来自我在网上提出的问题。关于如何以不同的速率闪烁 2 个 LED。
如果我们想每 1000 毫秒闪烁一个 LED,每 500 毫秒闪烁第二个,我们仍然可以使用延迟,就像这样,正如您所看到的,我将第一个 LED 的 1000 毫秒延迟拆分为第二个 LED 的 500 毫秒闪烁。
byte LED2 =12;无效设置(){ pinMode(LED_BUILTIN,输出); pinMode(LED2, OUTPUT);}void loop() { digitalWrite(LED_BUILTIN, HIGH);数字写入(LED2,高);延迟(500);数字写入(LED2,低);延迟(500);数字写入(LED_BUILTIN,低);数字写入(LED2,高);延迟(500);数字写入(LED2,低);延迟(500); }
但是如果我们想在 300 毫秒而不是 500 毫秒内更快地眨眼会发生什么。这就是延迟的使用使它变得非常复杂甚至不可能的地方。
那么该怎么办?停止使用延迟!
我们甚至在 Arduino IDE 中为它提供了一个示例,其名为blinkwithoutdelay。
我将第一个 LED 的逻辑复制到第二个 LED 并设置所需的延迟。
所以也尝试一下,远离延迟。我会说一个结局,我分享的代码远非完美,我想改变它但是,因为这个视频是针对那些刚接触arduino的人,我投了反对票。
代码
- 示例代码
示例代码 Arduino
const int ledPin =LED_BUILTIN;int ledState =LOW; unsigned long previousMillis =0; const 长间隔 =1000; const int ledPin2 =12;int ledState2 =低; unsigned long previousMillis2 =0; const long interval2 =300;无效设置(){ pinMode(ledPin,输出); pinMode(ledPin2, OUTPUT);}void loop() { unsigned long currentMillis =millis(); if (currentMillis - previousMillis>=间隔) { previousMillis =currentMillis;如果(ledState ==LOW){ ledState =HIGH; } else { ledState =LOW;数字写入(ledPin,ledState); } //结束 if (currentMillis - previousMillis2>=interval2) { previousMillis2 =currentMillis;如果(ledState2 ==LOW){ ledState2 =HIGH; } else { ledState2 =低; } digitalWrite(ledPin2, ledState2); } //如果结束 }
示意图
制造工艺