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.
BreathLed.h@0:13c83a6b336f, 2015-04-06 (annotated)
- Committer:
- steeven
- Date:
- Mon Apr 06 11:02:16 2015 +0000
- Revision:
- 0:13c83a6b336f
init release;
Who changed what in which revision?
User | Revision | Line number | New 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_ */ |