arduino Time Management blocking blinky with delay()


One of the most straight forward way of making an LED blink is: turn it on, wait a bit, turn it off, wait again, and repeat endlessly:

// set constants for blinking the built-in LED at 1 Hz
#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

However, waiting as done in the example above wastes CPU cycles, because it just sits there in a loop waiting for a certain point in time to go past. That's what the non-blocking ways, using millis() or elapsedMillis, do better - in the sense that they don't burn as much of the hardware's capabilities.