使用 elapsedMillis 库(和类)进行非阻塞闪烁

elapsedMillis 库提供与跟踪是通过自上次创建或设置到一定值的时间相同名称的类:

#include <elapsedMillis.h>

#define OUTPIN LED_BUILTIN
#define PERIOD 500

elapsedMillis ledTime;

bool ledState = false;

void setup() 
{                
  // initialize the digital pin as an output.
  pinMode(OUTPIN, OUTPUT);     
}

void loop()
{
    if (ledTime >= PERIOD) 
    {                
        ledState = !ledState;
        digitalWrite(OUTPIN, ledState);
        ledTime = 0;
    }
    // do other stuff here
}

你可以在示例中看到,当 LED 引脚切换时,ledTime 对象被指定为零。乍一看这可能并不令人惊讶,但如果发生更多耗时的事情,它会产生影响:

考虑 ledTimePERIOD 之间的比较在 750 毫秒后完成的情况。然后将 ledTime 设置为零意味着所有后续切换操作将延迟250 毫秒。相反,如果从 ledTime 中减去 PERIOD,LED 会看到一个短暂的时间段,然后继续闪烁,好像什么都没发生一样。