1、delay(ms)
延时函数,参数是延时时间,单位 ms。
delay() 是一个阻塞函数,阻止程序在完成该特定任务之前执行任何其他操作。如果需要同时执行多个任务,则不能使用 delay()。
2、millis()
返回子程序首次启动以来经过的毫秒数。
中断里不会执行延时函数,可以以此作为中断计时。
使用 millis() 函数,再经过一些计算就可以验证过去了多少时间而不阻塞代码。
使用 millis() 闪烁 LED:
#include <Arduino.h>
const int LED = 2;
int ledState = LOW; // LED 状态标志
const long interval = 1000; // 闪烁间隔,毫秒单位
unsigned long previousMillis = 0; // 时间变量,用长整型存储
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
// 如果当前时间 与 上次闪烁时间 的差 大于 希望闪烁LED的间隔时间,就该闪烁了
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis; // 替换当前时间
if (ledState == LOW) // 反转 LED 状态
ledState = HIGH;
else
ledState = LOW;
digitalWrite(LED, ledState); // 写入状态
}
}
3、 vTaskDelay();
调用任务需要阻塞的时间量,在多任务的延时中使用。
使用时需要用 portTICK_PERIOD_MS 宏进行 tick 时间转换。
延时 1s:vTaskDelay(1000/portTICK_PERIOD_MS);