arduino Time Management Non-blocking blinky with millis()


This is very close to an example from the arduino docs:

// set constants for blinking the built-in LED at 1 Hz
#define PERIOD 500  // this is in milliseconds

int ledState = LOW;

// millis() returns an unsigned long so we'll use that to keep track of time
unsigned long lastTime = 0;

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

void loop() {
  unsigned long now = millis();
  if (now - lastTime >= PERIOD) // this will be true every PERIOD milliseconds
    lastTime = now;
    if (ledState == LOW)
      ledState = HIGH;
      ledState = LOW;
    digitalWrite(OUTPIN, ledState);

  // now there's lots of time to do other stuff here

Using millis() in this way - to time operations in a non-blocking way - is something that is needed quite frequently, so consider using the elapsedMillis library for this.