Simple Debug LED or indicator class, runs in background for minimal code disruption. 5 Modes with some special functions
Dependents: Flasher_HelloWorld
Flasher.cpp@0:5c6eb2d20a5a, 2011-02-19 (annotated)
- Committer:
- p07gbar
- Date:
- Sat Feb 19 14:27:21 2011 +0000
- Revision:
- 0:5c6eb2d20a5a
- Child:
- 1:e94a73b015cc
V1.0
Who changed what in which revision?
User | Revision | Line number | New 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 | } |