This library is used to dirve a led with pluse for a duration and periodic toggle. Version 1.0
Led.cpp@0:5851c2ded0ed, 2015-12-24 (annotated)
- Committer:
- bborredon
- Date:
- Thu Dec 24 12:32:33 2015 +0000
- Revision:
- 0:5851c2ded0ed
Led library version 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bborredon | 0:5851c2ded0ed | 1 | /*********************************************************** |
bborredon | 0:5851c2ded0ed | 2 | Author: Bernard Borredon |
bborredon | 0:5851c2ded0ed | 3 | Date : 24 decembre 2015 |
bborredon | 0:5851c2ded0ed | 4 | Version: 1.0 |
bborredon | 0:5851c2ded0ed | 5 | - creation. |
bborredon | 0:5851c2ded0ed | 6 | ************************************************************/ |
bborredon | 0:5851c2ded0ed | 7 | |
bborredon | 0:5851c2ded0ed | 8 | #include "Led.h" |
bborredon | 0:5851c2ded0ed | 9 | |
bborredon | 0:5851c2ded0ed | 10 | // Class LedBase |
bborredon | 0:5851c2ded0ed | 11 | |
bborredon | 0:5851c2ded0ed | 12 | /* LedBase(PinName pin) |
bborredon | 0:5851c2ded0ed | 13 | * Class constructor : create and initialize LedBase instance |
bborredon | 0:5851c2ded0ed | 14 | * @param pin : name of the pin connected to the led (PinName) |
bborredon | 0:5851c2ded0ed | 15 | * @returns none |
bborredon | 0:5851c2ded0ed | 16 | */ |
bborredon | 0:5851c2ded0ed | 17 | LedBase::LedBase(PinName pin) : _pin(pin) |
bborredon | 0:5851c2ded0ed | 18 | { |
bborredon | 0:5851c2ded0ed | 19 | |
bborredon | 0:5851c2ded0ed | 20 | // Led is off |
bborredon | 0:5851c2ded0ed | 21 | _pin = 0; |
bborredon | 0:5851c2ded0ed | 22 | _isOn = 0; |
bborredon | 0:5851c2ded0ed | 23 | } |
bborredon | 0:5851c2ded0ed | 24 | |
bborredon | 0:5851c2ded0ed | 25 | /* void toggle(void) |
bborredon | 0:5851c2ded0ed | 26 | * Toggle led |
bborredon | 0:5851c2ded0ed | 27 | * @param none |
bborredon | 0:5851c2ded0ed | 28 | * @returns none |
bborredon | 0:5851c2ded0ed | 29 | */ |
bborredon | 0:5851c2ded0ed | 30 | void LedBase::toggle(void) |
bborredon | 0:5851c2ded0ed | 31 | { |
bborredon | 0:5851c2ded0ed | 32 | _isOn = !_isOn; |
bborredon | 0:5851c2ded0ed | 33 | _pin = !_pin; |
bborredon | 0:5851c2ded0ed | 34 | } |
bborredon | 0:5851c2ded0ed | 35 | |
bborredon | 0:5851c2ded0ed | 36 | /* void on(void) |
bborredon | 0:5851c2ded0ed | 37 | * Light on led |
bborredon | 0:5851c2ded0ed | 38 | * @param none |
bborredon | 0:5851c2ded0ed | 39 | * @returns none |
bborredon | 0:5851c2ded0ed | 40 | */ |
bborredon | 0:5851c2ded0ed | 41 | void LedBase::on(void) |
bborredon | 0:5851c2ded0ed | 42 | { |
bborredon | 0:5851c2ded0ed | 43 | if(!_isOn) { |
bborredon | 0:5851c2ded0ed | 44 | _isOn = true; |
bborredon | 0:5851c2ded0ed | 45 | _pin = 1; |
bborredon | 0:5851c2ded0ed | 46 | } |
bborredon | 0:5851c2ded0ed | 47 | } |
bborredon | 0:5851c2ded0ed | 48 | |
bborredon | 0:5851c2ded0ed | 49 | /* void off(void) |
bborredon | 0:5851c2ded0ed | 50 | * Light off led |
bborredon | 0:5851c2ded0ed | 51 | * @param none |
bborredon | 0:5851c2ded0ed | 52 | * @returns none |
bborredon | 0:5851c2ded0ed | 53 | */ |
bborredon | 0:5851c2ded0ed | 54 | void LedBase::off(void) |
bborredon | 0:5851c2ded0ed | 55 | { |
bborredon | 0:5851c2ded0ed | 56 | _isOn = false; |
bborredon | 0:5851c2ded0ed | 57 | _pin = 0; |
bborredon | 0:5851c2ded0ed | 58 | } |
bborredon | 0:5851c2ded0ed | 59 | |
bborredon | 0:5851c2ded0ed | 60 | /* bool LedBase::isOn(void) |
bborredon | 0:5851c2ded0ed | 61 | * Get led status (on or off) |
bborredon | 0:5851c2ded0ed | 62 | * @param none |
bborredon | 0:5851c2ded0ed | 63 | * @returns led status (bool) |
bborredon | 0:5851c2ded0ed | 64 | * false : led is off |
bborredon | 0:5851c2ded0ed | 65 | * ture : led is on |
bborredon | 0:5851c2ded0ed | 66 | */ |
bborredon | 0:5851c2ded0ed | 67 | bool LedBase::isOn(void) |
bborredon | 0:5851c2ded0ed | 68 | { |
bborredon | 0:5851c2ded0ed | 69 | return(_isOn); |
bborredon | 0:5851c2ded0ed | 70 | } |
bborredon | 0:5851c2ded0ed | 71 | |
bborredon | 0:5851c2ded0ed | 72 | // Class Led |
bborredon | 0:5851c2ded0ed | 73 | |
bborredon | 0:5851c2ded0ed | 74 | /* Led(PinName pin) |
bborredon | 0:5851c2ded0ed | 75 | * Class constructor : create and initialize Led instance |
bborredon | 0:5851c2ded0ed | 76 | * @param pin : name of the pin connected to the led (PinName) |
bborredon | 0:5851c2ded0ed | 77 | * @returns none |
bborredon | 0:5851c2ded0ed | 78 | */ |
bborredon | 0:5851c2ded0ed | 79 | Led::Led(PinName pin) : LedBase(pin) |
bborredon | 0:5851c2ded0ed | 80 | { |
bborredon | 0:5851c2ded0ed | 81 | |
bborredon | 0:5851c2ded0ed | 82 | // Create LedBase instance |
bborredon | 0:5851c2ded0ed | 83 | _led = new LedBase(pin); |
bborredon | 0:5851c2ded0ed | 84 | } |
bborredon | 0:5851c2ded0ed | 85 | |
bborredon | 0:5851c2ded0ed | 86 | /* void atTimer(void) |
bborredon | 0:5851c2ded0ed | 87 | * Led on timer : light off the led when called (private fuction) |
bborredon | 0:5851c2ded0ed | 88 | * @param none |
bborredon | 0:5851c2ded0ed | 89 | * @returns none |
bborredon | 0:5851c2ded0ed | 90 | */ |
bborredon | 0:5851c2ded0ed | 91 | void Led::atTimer(void) |
bborredon | 0:5851c2ded0ed | 92 | { |
bborredon | 0:5851c2ded0ed | 93 | _led->off(); |
bborredon | 0:5851c2ded0ed | 94 | } |
bborredon | 0:5851c2ded0ed | 95 | |
bborredon | 0:5851c2ded0ed | 96 | /* void toggleCB(void) |
bborredon | 0:5851c2ded0ed | 97 | * Led toggle timer : toggle the led when called (private function) |
bborredon | 0:5851c2ded0ed | 98 | * @param none |
bborredon | 0:5851c2ded0ed | 99 | * @returns none |
bborredon | 0:5851c2ded0ed | 100 | */ |
bborredon | 0:5851c2ded0ed | 101 | void Led::toggleCB(void) |
bborredon | 0:5851c2ded0ed | 102 | { |
bborredon | 0:5851c2ded0ed | 103 | _led->toggle(); |
bborredon | 0:5851c2ded0ed | 104 | } |
bborredon | 0:5851c2ded0ed | 105 | |
bborredon | 0:5851c2ded0ed | 106 | /* void Led::toggle(uint16_t period, bool mode) |
bborredon | 0:5851c2ded0ed | 107 | * Periodically toggle led |
bborredon | 0:5851c2ded0ed | 108 | * @param period : toggle period in ms (uinit16_t) |
bborredon | 0:5851c2ded0ed | 109 | * @param mode : stop auto toggle if false (bool) |
bborredon | 0:5851c2ded0ed | 110 | * @returns none |
bborredon | 0:5851c2ded0ed | 111 | */ |
bborredon | 0:5851c2ded0ed | 112 | void Led::toggle(uint16_t period, bool mode) |
bborredon | 0:5851c2ded0ed | 113 | { |
bborredon | 0:5851c2ded0ed | 114 | timestamp_t t; |
bborredon | 0:5851c2ded0ed | 115 | |
bborredon | 0:5851c2ded0ed | 116 | // Attach togggleCB function to _tToggle Ticker if mode is true and led is off, |
bborredon | 0:5851c2ded0ed | 117 | // overwise detach the function. |
bborredon | 0:5851c2ded0ed | 118 | if(mode && !_led->isOn()) { |
bborredon | 0:5851c2ded0ed | 119 | t = period * 1000; |
bborredon | 0:5851c2ded0ed | 120 | _tToggle.attach_us(this, &Led::toggleCB,t); |
bborredon | 0:5851c2ded0ed | 121 | } |
bborredon | 0:5851c2ded0ed | 122 | else { |
bborredon | 0:5851c2ded0ed | 123 | _tToggle.detach(); |
bborredon | 0:5851c2ded0ed | 124 | } |
bborredon | 0:5851c2ded0ed | 125 | } |
bborredon | 0:5851c2ded0ed | 126 | |
bborredon | 0:5851c2ded0ed | 127 | /* void pulse(uint16_t time) |
bborredon | 0:5851c2ded0ed | 128 | * Light on led for a duration |
bborredon | 0:5851c2ded0ed | 129 | * @param time : light on duration in ms (uint16_t) |
bborredon | 0:5851c2ded0ed | 130 | * @returns none |
bborredon | 0:5851c2ded0ed | 131 | */ |
bborredon | 0:5851c2ded0ed | 132 | void Led::pulse(uint16_t time) |
bborredon | 0:5851c2ded0ed | 133 | { |
bborredon | 0:5851c2ded0ed | 134 | timestamp_t t; |
bborredon | 0:5851c2ded0ed | 135 | |
bborredon | 0:5851c2ded0ed | 136 | // Attach atTimer function to _tPulse Timer if led is off. |
bborredon | 0:5851c2ded0ed | 137 | if(!_led->isOn()) { |
bborredon | 0:5851c2ded0ed | 138 | _led->on(); |
bborredon | 0:5851c2ded0ed | 139 | t = time * 1000; |
bborredon | 0:5851c2ded0ed | 140 | _tPulse.attach_us(this,&Led::atTimer,t); |
bborredon | 0:5851c2ded0ed | 141 | } |
bborredon | 0:5851c2ded0ed | 142 | } |