This library is used to dirve a led with pluse for a duration and periodic toggle. Version 1.0
Revision 0:5851c2ded0ed, committed 2015-12-24
- Comitter:
- bborredon
- Date:
- Thu Dec 24 12:32:33 2015 +0000
- Commit message:
- Led library version 1.0
Changed in this revision
Led.cpp | Show annotated file Show diff for this revision Revisions of this file |
Led.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 5851c2ded0ed Led.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Led.cpp Thu Dec 24 12:32:33 2015 +0000 @@ -0,0 +1,142 @@ +/*********************************************************** +Author: Bernard Borredon +Date : 24 decembre 2015 +Version: 1.0 + - creation. +************************************************************/ + +#include "Led.h" + +// Class LedBase + +/* LedBase(PinName pin) + * Class constructor : create and initialize LedBase instance + * @param pin : name of the pin connected to the led (PinName) + * @returns none + */ +LedBase::LedBase(PinName pin) : _pin(pin) +{ + + // Led is off + _pin = 0; + _isOn = 0; +} + +/* void toggle(void) + * Toggle led + * @param none + * @returns none + */ +void LedBase::toggle(void) +{ + _isOn = !_isOn; + _pin = !_pin; +} + +/* void on(void) + * Light on led + * @param none + * @returns none + */ +void LedBase::on(void) +{ + if(!_isOn) { + _isOn = true; + _pin = 1; + } +} + +/* void off(void) + * Light off led + * @param none + * @returns none + */ +void LedBase::off(void) +{ + _isOn = false; + _pin = 0; +} + +/* bool LedBase::isOn(void) + * Get led status (on or off) + * @param none + * @returns led status (bool) + * false : led is off + * ture : led is on + */ +bool LedBase::isOn(void) +{ + return(_isOn); +} + +// Class Led + +/* Led(PinName pin) + * Class constructor : create and initialize Led instance + * @param pin : name of the pin connected to the led (PinName) + * @returns none + */ +Led::Led(PinName pin) : LedBase(pin) +{ + + // Create LedBase instance + _led = new LedBase(pin); +} + +/* void atTimer(void) + * Led on timer : light off the led when called (private fuction) + * @param none + * @returns none + */ +void Led::atTimer(void) +{ + _led->off(); +} + +/* void toggleCB(void) + * Led toggle timer : toggle the led when called (private function) + * @param none + * @returns none + */ +void Led::toggleCB(void) +{ + _led->toggle(); +} + +/* void Led::toggle(uint16_t period, bool mode) + * Periodically toggle led + * @param period : toggle period in ms (uinit16_t) + * @param mode : stop auto toggle if false (bool) + * @returns none + */ +void Led::toggle(uint16_t period, bool mode) +{ + timestamp_t t; + + // Attach togggleCB function to _tToggle Ticker if mode is true and led is off, + // overwise detach the function. + if(mode && !_led->isOn()) { + t = period * 1000; + _tToggle.attach_us(this, &Led::toggleCB,t); + } + else { + _tToggle.detach(); + } +} + +/* void pulse(uint16_t time) + * Light on led for a duration + * @param time : light on duration in ms (uint16_t) + * @returns none + */ +void Led::pulse(uint16_t time) +{ + timestamp_t t; + + // Attach atTimer function to _tPulse Timer if led is off. + if(!_led->isOn()) { + _led->on(); + t = time * 1000; + _tPulse.attach_us(this,&Led::atTimer,t); + } +}
diff -r 000000000000 -r 5851c2ded0ed Led.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Led.h Thu Dec 24 12:32:33 2015 +0000 @@ -0,0 +1,125 @@ +#ifndef __Led_H__ +#define __Led_H__ + +/*********************************************************** +Author: Bernard Borredon +Date : 24 decembre 2015 +Version: 1.0 + - creation. +************************************************************/ + +#include "mbed.h" + +/** Led class + * Used to drive a led : on, on for a duration, off, toggle, toggle with a period. + * + * @code + * #include "Led.h" + * + * Led led1(LED1); // LPC1768 LED1 + * Led led2(LED2); // LPC1768 LED2 + * Led led3(LED3); // LPC1768 LED3 + * Led led4(LED4); // LPC1768 LED4 + * + * int main() + * { + * int32_t count = 0; + + * // Light on LED1 + * led1.on(); + * + * // Toggle LED2 with a 2000ms period + * led2.toggle(2000); + * + * // Toggle LED3 with a 4000ms period + * led3.toggle(4000,true); + * + * while(1) { + * // Pulse LED4 for 1000ms each 10s + * led4.pulse(1000); + * count++; + * wait(10.0); + * + * // After 60s stop toggle LED2 + * if(count == 6) + * led2.toggle(0,false); + * } + * return(0); + * } + * @endcode + */ + +/** LedBase class + * Used to drive a led : on, off, toggle. + * + */ + +class LedBase { + public : + /** Class constructor : create and initialize LedBase instance + * @param pin : name of the pin connected to the led (PinName) + * @returns none + */ + LedBase(PinName pin); + + /** Toggle led + * @param none + * @returns none + */ + void toggle(void); + + /** Light on led + * @param none + * @returns none + */ + void on(void); + + /** Light off led + * @param none + * @returns none + */ + void off(void); + + /** Get led status (on or off) + * @param none + * @returns led status (bool) + * false : led is off + * ture : led is on + */ + bool isOn(void); + + protected : + DigitalOut _pin; + bool _isOn; +}; + +class Led : public LedBase { + public : + /** Class constructor : create and initialize Led instance + * @param pin : name of the pin connected to the led (PinName) + * @returns none + */ + Led(PinName pin); + + /** Periodically toggle led + * @param period : toggle period in ms (uinit16_t) + * @param mode : stop auto toggle if false (bool) + * @returns none + */ + void toggle(uint16_t period, bool mode = true); + + /** Light on led for a duration + * @param time : light on duration in ms (uint16_t) + * @returns none + */ + virtual void pulse(uint16_t time); + + private : + LedBase *_led; + Timeout _tPulse; + Ticker _tToggle; + void atTimer(void); + void toggleCB(void); +}; + +#endif