📅  最后修改于: 2023-12-03 15:39:28.970000             🧑  作者: Mango
延迟函数是在控制Arduino板上的任务执行时非常常见的一种方法。Arduino的核心库库中包含了两个常用的延迟函数:delay()
和millis()
。
delay()
函数是一种使Arduino停止执行程序一段时间的简单方法。millis()
函数用来获取当前时间。它的精度取决于Arduino的系统时钟,通常为1毫秒。在本篇文章中,我们将会了解:
millis()
函数。millis()
函数的作用是获取自Arduino板电源起始时间以来的毫秒数。我们可以使用millis()
函数实现非阻塞延迟,即哪个任务需要延迟,就哪个任务被延迟,不会阻塞其他任务。
下面是一个示例程序,其中使用了millis()
函数来非阻塞延迟。在这个程序中,当按下按钮时,LED会闪烁三次,每次亮1秒,并且每次闪烁之间间隔1秒。
const int BUTTON_PIN = 2; //Button connected to digital pin 2
const int LED_PIN = 13; //LED connected to digital pin 13
bool buttonPressed = false;
unsigned long lastButtonPress = 0;
int ledState = LOW;
unsigned long lastLedUpdate = 0;
const int BLINK_DELAY = 1000; //How long to keep the LED on/off
const int PAUSE_DELAY = 1000; //How long to wait between blinks
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); //set button as input
pinMode(LED_PIN, OUTPUT); //set LED as output
}
void loop() {
//check if button is pressed
if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed) {
buttonPressed = true;
lastButtonPress = millis();
} else if (digitalRead(BUTTON_PIN) == HIGH && buttonPressed) {
buttonPressed = false;
int blinkCount = 0;
//do blink sequence 3 times
while (blinkCount < 3){
//Turn LED on
if (millis() - lastLedUpdate >= BLINK_DELAY) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
lastLedUpdate = millis();
}
//delay for how long LED is on
if (ledState == HIGH && millis() - lastLedUpdate >= BLINK_DELAY) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
lastLedUpdate = millis();
blinkCount++;
if (blinkCount < 3) {
delay(PAUSE_DELAY);
}
}
}
}
}
在上述示例程序中,我们通过使用millis()
函数来实现:
这个程序会不断检查当前时间是否超过与上次更新LED状态的时间相差1000毫秒,如果是则更新LED状态,否则不做任何事情。
在本教程中,我们了解了一种使用millis()
函数和非阻塞延迟的方法。这种方法可以在程序执行的同时使用延迟,不会阻塞其他任务。如果想要实现更高级的任务定时器,可以使用第三方库,例如TimerOne
或SimpleTimer
。