Simple Debug LED or indicator class, runs in background for minimal code disruption. 5 Modes with some special functions

Dependents:   Flasher_HelloWorld

Committer:
p07gbar
Date:
Sat Feb 26 13:17:23 2011 +0000
Revision:
1:e94a73b015cc
Parent:
0:5c6eb2d20a5a
V1.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p07gbar 0:5c6eb2d20a5a 1 /*Small library to debug and alert with a single LED
p07gbar 0:5c6eb2d20a5a 2 * Copyright (c) 2011 p07gbar
p07gbar 0:5c6eb2d20a5a 3 *
p07gbar 0:5c6eb2d20a5a 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
p07gbar 0:5c6eb2d20a5a 5 * of this software and associated documentation files (the "Software"), to deal
p07gbar 0:5c6eb2d20a5a 6 * in the Software without restriction, including without limitation the rights
p07gbar 0:5c6eb2d20a5a 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
p07gbar 0:5c6eb2d20a5a 8 * copies of the Software, and to permit persons to whom the Software is
p07gbar 0:5c6eb2d20a5a 9 * furnished to do so, subject to the following conditions:
p07gbar 0:5c6eb2d20a5a 10 *
p07gbar 0:5c6eb2d20a5a 11 * The above copyright notice and this permission notice shall be included in
p07gbar 0:5c6eb2d20a5a 12 * all copies or substantial portions of the Software.
p07gbar 0:5c6eb2d20a5a 13 *
p07gbar 0:5c6eb2d20a5a 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
p07gbar 0:5c6eb2d20a5a 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
p07gbar 0:5c6eb2d20a5a 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
p07gbar 0:5c6eb2d20a5a 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
p07gbar 0:5c6eb2d20a5a 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
p07gbar 0:5c6eb2d20a5a 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
p07gbar 0:5c6eb2d20a5a 20 * THE SOFTWARE.
p07gbar 0:5c6eb2d20a5a 21 *
p07gbar 0:5c6eb2d20a5a 22 */
p07gbar 0:5c6eb2d20a5a 23
p07gbar 0:5c6eb2d20a5a 24 #include "Flasher.h"
p07gbar 0:5c6eb2d20a5a 25
p07gbar 0:5c6eb2d20a5a 26 Flasher::Flasher(PinName pin, int startState):_led(pin)
p07gbar 0:5c6eb2d20a5a 27 {
p07gbar 0:5c6eb2d20a5a 28 state = checkState(startState);
p07gbar 0:5c6eb2d20a5a 29 flashTimes[0] = 10;
p07gbar 0:5c6eb2d20a5a 30 flashTimes[1] = 10;
p07gbar 0:5c6eb2d20a5a 31 flashTimes[2] = 2;
p07gbar 0:5c6eb2d20a5a 32 flashTimes[3] = 1;
p07gbar 0:5c6eb2d20a5a 33 flashTimes[4] = 0.3;
p07gbar 0:5c6eb2d20a5a 34 flashbase.attach(this, &Flasher::tick, flashTimes[state]);
p07gbar 0:5c6eb2d20a5a 35 active = true;
p07gbar 0:5c6eb2d20a5a 36 tick();
p07gbar 0:5c6eb2d20a5a 37 }
p07gbar 0:5c6eb2d20a5a 38
p07gbar 0:5c6eb2d20a5a 39 void Flasher::updateFlash(int statein)
p07gbar 0:5c6eb2d20a5a 40 {
p07gbar 0:5c6eb2d20a5a 41 state = checkState(statein);
p07gbar 0:5c6eb2d20a5a 42 flashbase.attach(this, &Flasher::tick, flashTimes[state]);
p07gbar 0:5c6eb2d20a5a 43 tick();
p07gbar 0:5c6eb2d20a5a 44 }
p07gbar 0:5c6eb2d20a5a 45
p07gbar 0:5c6eb2d20a5a 46 int Flasher::getState()
p07gbar 0:5c6eb2d20a5a 47 {
p07gbar 0:5c6eb2d20a5a 48 return state;
p07gbar 0:5c6eb2d20a5a 49 }
p07gbar 0:5c6eb2d20a5a 50
p07gbar 0:5c6eb2d20a5a 51 void Flasher::pauseFor(float time)
p07gbar 0:5c6eb2d20a5a 52 {
p07gbar 0:5c6eb2d20a5a 53 active = false;
p07gbar 0:5c6eb2d20a5a 54 forTime = time;
p07gbar 0:5c6eb2d20a5a 55 returntoState = state;
p07gbar 0:5c6eb2d20a5a 56 flashbase.detach();
p07gbar 0:5c6eb2d20a5a 57 forbase.attach(this, &Flasher::timeout, time);
p07gbar 0:5c6eb2d20a5a 58 }
p07gbar 0:5c6eb2d20a5a 59
p07gbar 0:5c6eb2d20a5a 60 void Flasher::onFor(float time,int newState, int returnState = 0)
p07gbar 0:5c6eb2d20a5a 61 {
p07gbar 0:5c6eb2d20a5a 62 active = true;
p07gbar 0:5c6eb2d20a5a 63 state = checkState(newState);
p07gbar 0:5c6eb2d20a5a 64 returntoState = checkState(returnState);
p07gbar 0:5c6eb2d20a5a 65 flashbase.attach(this, &Flasher::tick, flashTimes[state]);
p07gbar 0:5c6eb2d20a5a 66 forTime = time;
p07gbar 0:5c6eb2d20a5a 67 forbase.attach(this, &Flasher::timeout, time);
p07gbar 0:5c6eb2d20a5a 68 }
p07gbar 0:5c6eb2d20a5a 69
p07gbar 0:5c6eb2d20a5a 70 void Flasher::pause()
p07gbar 0:5c6eb2d20a5a 71 {
p07gbar 0:5c6eb2d20a5a 72 active = false;
p07gbar 0:5c6eb2d20a5a 73 _led = 0;
p07gbar 0:5c6eb2d20a5a 74 flashbase.detach();
p07gbar 0:5c6eb2d20a5a 75 forbase.detach();
p07gbar 0:5c6eb2d20a5a 76 }
p07gbar 0:5c6eb2d20a5a 77
p07gbar 0:5c6eb2d20a5a 78 void Flasher::resume()
p07gbar 0:5c6eb2d20a5a 79 {
p07gbar 0:5c6eb2d20a5a 80 active = true;
p07gbar 0:5c6eb2d20a5a 81 flashbase.attach(this, &Flasher::tick, flashTimes[state]);
p07gbar 0:5c6eb2d20a5a 82 }
p07gbar 0:5c6eb2d20a5a 83
p07gbar 0:5c6eb2d20a5a 84 void Flasher::setFlashTime(int statein, float newTime)
p07gbar 0:5c6eb2d20a5a 85 {
p07gbar 0:5c6eb2d20a5a 86 flashTimes[checkState(statein)] = newTime;
p07gbar 0:5c6eb2d20a5a 87 }
p07gbar 0:5c6eb2d20a5a 88
p07gbar 0:5c6eb2d20a5a 89 float Flasher::getFlashTime(int statein)
p07gbar 0:5c6eb2d20a5a 90 {
p07gbar 0:5c6eb2d20a5a 91 float toRet = flashTimes[checkState(statein)];
p07gbar 0:5c6eb2d20a5a 92 return toRet;
p07gbar 0:5c6eb2d20a5a 93 }
p07gbar 0:5c6eb2d20a5a 94
p07gbar 0:5c6eb2d20a5a 95 void Flasher::tick()
p07gbar 0:5c6eb2d20a5a 96 {
p07gbar 0:5c6eb2d20a5a 97 if(active)
p07gbar 0:5c6eb2d20a5a 98 {
p07gbar 0:5c6eb2d20a5a 99 switch(state)
p07gbar 0:5c6eb2d20a5a 100 {
p07gbar 0:5c6eb2d20a5a 101 case 0:
p07gbar 0:5c6eb2d20a5a 102 _led = 0;
p07gbar 0:5c6eb2d20a5a 103 break;
p07gbar 0:5c6eb2d20a5a 104 case 1:
p07gbar 0:5c6eb2d20a5a 105 _led = 1;
p07gbar 0:5c6eb2d20a5a 106 break;
p07gbar 0:5c6eb2d20a5a 107 case 2:
p07gbar 0:5c6eb2d20a5a 108 case 3:
p07gbar 0:5c6eb2d20a5a 109 case 4:
p07gbar 0:5c6eb2d20a5a 110 _led = !_led;
p07gbar 0:5c6eb2d20a5a 111 break;
p07gbar 0:5c6eb2d20a5a 112 default:
p07gbar 0:5c6eb2d20a5a 113 _led = 0;
p07gbar 0:5c6eb2d20a5a 114 break;
p07gbar 0:5c6eb2d20a5a 115 }
p07gbar 0:5c6eb2d20a5a 116 }
p07gbar 0:5c6eb2d20a5a 117 }
p07gbar 0:5c6eb2d20a5a 118
p07gbar 0:5c6eb2d20a5a 119 void Flasher::timeout()
p07gbar 0:5c6eb2d20a5a 120 {
p07gbar 0:5c6eb2d20a5a 121 active = true;
p07gbar 0:5c6eb2d20a5a 122 state = returntoState;
p07gbar 0:5c6eb2d20a5a 123 forTime = 0;
p07gbar 0:5c6eb2d20a5a 124 flashbase.attach(this, &Flasher::tick, flashTimes[state]);
p07gbar 0:5c6eb2d20a5a 125 forbase.detach();
p07gbar 0:5c6eb2d20a5a 126 tick();
p07gbar 0:5c6eb2d20a5a 127 }
p07gbar 0:5c6eb2d20a5a 128
p07gbar 0:5c6eb2d20a5a 129 int Flasher::checkState(int statein)
p07gbar 0:5c6eb2d20a5a 130 {
p07gbar 0:5c6eb2d20a5a 131 if(statein > NUMSTATES || statein < 0)
p07gbar 0:5c6eb2d20a5a 132 {
p07gbar 0:5c6eb2d20a5a 133 return 0;
p07gbar 0:5c6eb2d20a5a 134 }
p07gbar 0:5c6eb2d20a5a 135 else
p07gbar 0:5c6eb2d20a5a 136 {
p07gbar 0:5c6eb2d20a5a 137 return statein;
p07gbar 0:5c6eb2d20a5a 138 }
p07gbar 0:5c6eb2d20a5a 139 }
p07gbar 1:e94a73b015cc 140
p07gbar 1:e94a73b015cc 141 Flasher& Flasher::operator= (int statein)
p07gbar 1:e94a73b015cc 142 {
p07gbar 1:e94a73b015cc 143 updateFlash(statein);
p07gbar 1:e94a73b015cc 144 return *this;
p07gbar 1:e94a73b015cc 145 }
p07gbar 1:e94a73b015cc 146
p07gbar 1:e94a73b015cc 147 Flasher::operator int()
p07gbar 1:e94a73b015cc 148 {
p07gbar 1:e94a73b015cc 149 return state;
p07gbar 1:e94a73b015cc 150 }