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.

Revision:
0:13c83a6b336f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BreathLed.h	Mon Apr 06 11:02:16 2015 +0000
@@ -0,0 +1,66 @@
+/*
+ * BreathLed.h
+ *
+ *  Created on: 2015/4/6
+ *      Author: steeven@gmail.com
+ */
+
+#ifndef BREATHLED_H_
+#define BREATHLED_H_
+
+#include "mbed.h"
+
+#define BREATH_STEPS 24
+
+namespace steeven {
+
+/** A breath led, used for turn on/off or loop the leds slowly with PWM.
+ */
+class BreathLed {
+
+public:
+    /**
+     * Create an BreathLed
+     *
+     * @param pin LED pin with PWM support
+     * @param time Time for the brightness transition
+     * @param hold Time for holding the brightness before next transition.
+     *      Effective for loop mode.
+     */
+    BreathLed(PinName pin, float time = 1, float hold = 1);
+
+    virtual ~BreathLed();
+
+    /* Group: Access Methods */
+
+    /**
+     * start loop the led
+     */
+    void loop(float time = 1, float hold = 1);
+
+    /**
+     * turn on the led
+     */
+    void on();
+
+    /**
+     * turn off the led
+     */
+    void off();
+
+
+protected:
+    PwmOut _pin;
+    int _mode; //loop, on, off
+    float _time; //time of brightness transition
+    float _hold; //time to hold in loop
+    Ticker _ticker;
+
+    int _off; //current direction
+    int _step; //current brightness
+
+    void step_tick();
+    void hold_tick();
+};
+}
+#endif /* BREATHLED_H_ */