使用 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 會看到一個短暫的時間段,然後繼續閃爍,好像什麼都沒發生一樣。