Timemark is a simple library abstracting the "blink-without-delay" code pattern to a single function. Below is a multi-blink example sketch that uses timemarks for three LED blink periods and a fourth for trace timing.
#include <Timemark.h>
Timemark trace(500);
const int led1 = 13;
Timemark blink1(500);
const int led2 = 12;
Timemark blink2(1000);
const int led3 = 11;
Timemark blink3(1500);
void setup()
{
Serial.begin(9600);
while (!Serial);
Serial.println(F("MultiBlink: started"));
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
trace.start();
blink1.start();
blink2.start();
blink3.start();
}
void loop()
{
// Trace LED status
if (trace.expired()) {
Serial.print(millis());
Serial.print(' ');
Serial.print(digitalRead(led1));
Serial.print(' ');
Serial.print(digitalRead(led2));
Serial.print(' ');
Serial.println(digitalRead(led3));
}
// Blink LED 1
if (blink1.expired())
digitalWrite(led1, !digitalRead(led1));
// Blink LED 2
if (blink2.expired())
digitalWrite(led2, !digitalRead(led2));
// Blink LED 3
if (blink3.expired())
digitalWrite(led3, !digitalRead(led3));
}
More advanced usage examples can be found in the examples directory.
Cheers!