Breath LED that turn on/off or loop the brightness smoothly.

Dependents:   BreathLed-demo EPD_GDE021A1_demo mbed_esp8266_demo NUCLEO_uart_flow_control

This breathing-led uses Ticker and PWM which consumes few CPU, and most important, you can use it to tell system hang.

Just init it with a PWM pin which connected to a LED.

Committer:
steeven
Date:
Mon Apr 06 11:02:16 2015 +0000
Revision:
0:13c83a6b336f
init release;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
steeven 0:13c83a6b336f 1 /*
steeven 0:13c83a6b336f 2 * BreathLed.h
steeven 0:13c83a6b336f 3 *
steeven 0:13c83a6b336f 4 * Created on: 2015/4/6
steeven 0:13c83a6b336f 5 * Author: steeven@gmail.com
steeven 0:13c83a6b336f 6 */
steeven 0:13c83a6b336f 7
steeven 0:13c83a6b336f 8 #ifndef BREATHLED_H_
steeven 0:13c83a6b336f 9 #define BREATHLED_H_
steeven 0:13c83a6b336f 10
steeven 0:13c83a6b336f 11 #include "mbed.h"
steeven 0:13c83a6b336f 12
steeven 0:13c83a6b336f 13 #define BREATH_STEPS 24
steeven 0:13c83a6b336f 14
steeven 0:13c83a6b336f 15 namespace steeven {
steeven 0:13c83a6b336f 16
steeven 0:13c83a6b336f 17 /** A breath led, used for turn on/off or loop the leds slowly with PWM.
steeven 0:13c83a6b336f 18 */
steeven 0:13c83a6b336f 19 class BreathLed {
steeven 0:13c83a6b336f 20
steeven 0:13c83a6b336f 21 public:
steeven 0:13c83a6b336f 22 /**
steeven 0:13c83a6b336f 23 * Create an BreathLed
steeven 0:13c83a6b336f 24 *
steeven 0:13c83a6b336f 25 * @param pin LED pin with PWM support
steeven 0:13c83a6b336f 26 * @param time Time for the brightness transition
steeven 0:13c83a6b336f 27 * @param hold Time for holding the brightness before next transition.
steeven 0:13c83a6b336f 28 * Effective for loop mode.
steeven 0:13c83a6b336f 29 */
steeven 0:13c83a6b336f 30 BreathLed(PinName pin, float time = 1, float hold = 1);
steeven 0:13c83a6b336f 31
steeven 0:13c83a6b336f 32 virtual ~BreathLed();
steeven 0:13c83a6b336f 33
steeven 0:13c83a6b336f 34 /* Group: Access Methods */
steeven 0:13c83a6b336f 35
steeven 0:13c83a6b336f 36 /**
steeven 0:13c83a6b336f 37 * start loop the led
steeven 0:13c83a6b336f 38 */
steeven 0:13c83a6b336f 39 void loop(float time = 1, float hold = 1);
steeven 0:13c83a6b336f 40
steeven 0:13c83a6b336f 41 /**
steeven 0:13c83a6b336f 42 * turn on the led
steeven 0:13c83a6b336f 43 */
steeven 0:13c83a6b336f 44 void on();
steeven 0:13c83a6b336f 45
steeven 0:13c83a6b336f 46 /**
steeven 0:13c83a6b336f 47 * turn off the led
steeven 0:13c83a6b336f 48 */
steeven 0:13c83a6b336f 49 void off();
steeven 0:13c83a6b336f 50
steeven 0:13c83a6b336f 51
steeven 0:13c83a6b336f 52 protected:
steeven 0:13c83a6b336f 53 PwmOut _pin;
steeven 0:13c83a6b336f 54 int _mode; //loop, on, off
steeven 0:13c83a6b336f 55 float _time; //time of brightness transition
steeven 0:13c83a6b336f 56 float _hold; //time to hold in loop
steeven 0:13c83a6b336f 57 Ticker _ticker;
steeven 0:13c83a6b336f 58
steeven 0:13c83a6b336f 59 int _off; //current direction
steeven 0:13c83a6b336f 60 int _step; //current brightness
steeven 0:13c83a6b336f 61
steeven 0:13c83a6b336f 62 void step_tick();
steeven 0:13c83a6b336f 63 void hold_tick();
steeven 0:13c83a6b336f 64 };
steeven 0:13c83a6b336f 65 }
steeven 0:13c83a6b336f 66 #endif /* BREATHLED_H_ */