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
的非阻塞方式做得更好 - 从某种意义上说它们不会消耗那么多的硬件资源。