Non-blocking fading patterns for single LEDs.
MIT License
Featured on hackster.io!
This library gives you non-blocking blinking patterns and smooth fade effects for your LEDs, buzzers or any other status indicators
Other goodies:
delay()
)blink()
while blinking does notThis example blinks the built-in LED on pin 13 in the following pattern:
#include <Blinkenlight.h>
Blinkenlight led(13);
void setup()
{
led.pattern(2, 3); // blink 2x, then 3x
}
void loop()
{
led.update();
}
Note: If you'd love a smoother look, just use the
Fadinglight
-class instead ofBlinkenlight
. AFadinglight
has smooth fading effects with logarithmic LED brightness compensation. Your boards never looked more professional! /s
Blinkenlight is available in the platform.io registry
pio lib install "tfeldmann/Blinkenlight"
Blinkenlight
is available in the Arduino library manager.
// Without fading effect:
#include <Blinkenlight.h>
Blinkenlight myLed(13); // Blinkenlight(int pin, bool invert = false);
// With fading effect:
#include <Fadinglight.h>
Fadinglight myLed(13); // Fadinglight(int pin, bool logarithmic = true, int fade_speed = 30);
// now in your code you can do:
myLed.off();
myLed.blink();
myLed.pattern(3, 5, SPEED_FAST);
// ... and so on (see below)
// set permanently ON
void on();
// set permanently OFF
void off();
// toggle between on / off
void toggle();
// set ON / OFF permanently
void permanent(bool enable);
// blink infinitely
void blink();
void blink(SpeedSetting speed);
// blink `num` times, then long pause
// repeats, if `repeat` is set, OFF otherwise.
void pattern(int num, bool repeat = true);
void pattern(int num, SpeedSetting speed, bool repeat = true);
// blink `num1` times, short pause, blink `num2` times, long pause
// repeats, if `repeat` is set, OFF otherwise.
void pattern(int num1, int num2, bool repeat = true);
void pattern(int num1, int num2, SpeedSetting speed, bool repeat = true);
// turn ON for the given duration in ms. Continues in the previous mode afterwards.
void flash(uint16_t duration_ms);
// turn OFF for the given duration in ms. Continues in the previous mode afterwards.
void pause(uint16_t duration_ms);
// `true` if the Blinkenlight is currently blinking, showing a pattern, flashing or pausing
bool isOn();
// You must call this in your loop!
// Returns the current value of the light (LOW / HIGH).
// - You can ignore that if you want.
int update();
// setup the timing parameters
void setSpeed(SpeedSetting setting);
// Available by default: SPEED_RAPID, SPEED_FAST, SPEED_SLOW
myLed.setSpeed(SPEED_RAPID);
myLed.setSpeed(SPEED_FAST);
myLed.setSpeed(SPEED_SLOW);
// .. or use your own settings. SpeedSetting is a struct:
typedef struct
{
uint16_t on_ms; // ON time in milliseconds
uint16_t off_ms; // OFF time in milliseconds
uint16_t pause_ms; // pause between `num1` and `num2` in pattern()
uint16_t ending_ms; // ending after a full pattern
} SpeedSetting;
// so you can set it up like this:
SpeedSetting mySettings = {
.on_ms = 100,
.off_ms = 100,
.pause_ms = 2000,
.ending_ms = 2000,
};
// ... alternatively you can setup the speed settings directly with this method
void setSpeed(
uint16_t on_ms,
uint16_t off_ms,
uint16_t pause_ms,
uint16_t ending_ms);
// ... or by providing a single value, the other values are inferred from that by
// some internal factors
void setSpeed(uint16_t on_ms);
// Hint: You can also modify the values directly - even on the fly - e.g.:
myLed.settings.on_ms = 250;
myLed.settings.pause_ms = 2000;
LED brightness is not linear to the PWM value you set to the pin. This library uses a logarithmic dimming curve to create natural looking fading effects.
No problem! You have two options.
Use the generic BaseBlinker
class from <BaseBlinker.h>
. The .update()
-method
returns a boolean whether the status is currently HIGH
or LOW
. You can then send
this value to your status Blinkenlight (see examples/GenericBlink
).
Use the BaseFader
class if you want fading effects. Here the update
method
returns an integer 0..255
.
Subclass the BaseBlinker
class with custom logic. This is what Blinkenlight
does
internally (see src/Blinkenlight.h
). Have a look at the SerialBlink
example!
I created this library because I like to blink my error codes to the user. So for example blink two times, then three times for error 23 - you get the idea.
Over the time I found it super useful to handle basically all buzzers, lights and LEDs. I have multiple applications where it controls status lights via CAN.