Simple Delay

Why use complex timing functions if simple ones will work? These simple Arduino delay functions just wait a fixed amount of time.

delay()

The simplest timing function is delay(). It waits a number of milliseconds.

digitalWrite(11, HIGH);  // pin 11 high
delay(1000);             // for 1 second
digitalWrite(11, LOW);  

For very precise delays, you can use delayMicroseconds(), up to 16383 us. With delay(), you can wait up to 429497295 ms, or about 49.7 days.

While these functions are easy, your program can not do other work during the delay.

delayMicroseconds()

Generally use for short, hardware motivated delays. Especially when using an analog multiplexer, usually a short delay after changing the mux channel so the signal can become stable before reading.

TODO: example with mux to adc

Interrupts can change delay, especially on Teensy 2.0, LC, 3.2, 3.5, 3.6. Teensy 4 boards attempt to check actual time rather than just fixed software delay, so delayMicroseconds() is less sensitive to interrupts on Teensy 4.0, 4.1, MicroMod.

delayNanoseconds()

All Teensy boards support delayNanoseconds(). The actual delay may be longer, especially if running at a slow clock speed or using a non-const number for nanoseconds.