delay() 實現阻塞式 LED 閃爍

使 LED 閃爍最直接的方法之一是:開啟它,等待一下,關閉它,再次等待,並無休止地重複:

// set constants for blinking the built-in LED at 1 Hz
#define OUTPIN LED_BUILTIN
#define PERIOD 500

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

void loop()
{
  digitalWrite(OUTPIN, HIGH);   // sets the pin on
  delayMicroseconds(PERIOD);        // pauses for 500 miliseconds      
  digitalWrite(OUTPIN, LOW);    // sets the pin off
  delayMicroseconds(PERIOD);        // pauses for 500 milliseconds

  // doing other time-consuming stuff here will skew the blinking
}

但是,在上面的示例中等待,會浪費 CPU 資源,因為它只是在一個迴圈中等待某個時間點過去。這就是使用 millis()elapsedMillis 的非阻塞方式做得更好 - 從某種意義上說它們不會消耗那麼多的硬體資源。