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 #ifndef FLASHER_H
p07gbar 0:5c6eb2d20a5a 25 #define FLASHER_H
p07gbar 0:5c6eb2d20a5a 26
p07gbar 0:5c6eb2d20a5a 27 #include "mbed.h"
p07gbar 0:5c6eb2d20a5a 28
p07gbar 0:5c6eb2d20a5a 29 #define NUMSTATES 5
p07gbar 0:5c6eb2d20a5a 30 #define OFF 0
p07gbar 0:5c6eb2d20a5a 31 #define ON 1
p07gbar 0:5c6eb2d20a5a 32 #define SLOW 2
p07gbar 0:5c6eb2d20a5a 33 #define MEDIUM 3
p07gbar 0:5c6eb2d20a5a 34 #define QUICK 4
p07gbar 0:5c6eb2d20a5a 35 #define FAST 4
p07gbar 0:5c6eb2d20a5a 36
p07gbar 0:5c6eb2d20a5a 37 /** A LED Flasher class based on Ticker and Timeout
p07gbar 0:5c6eb2d20a5a 38 *
p07gbar 0:5c6eb2d20a5a 39 * States are defined in words:
p07gbar 0:5c6eb2d20a5a 40 *
p07gbar 0:5c6eb2d20a5a 41 * OFF, ON, SLOW, MEDIUM, QUICK or FAST
p07gbar 0:5c6eb2d20a5a 42 *
p07gbar 0:5c6eb2d20a5a 43 * With default times of (in seconds):
p07gbar 0:5c6eb2d20a5a 44 *
p07gbar 0:5c6eb2d20a5a 45 * Slow: 2
p07gbar 0:5c6eb2d20a5a 46 *
p07gbar 0:5c6eb2d20a5a 47 * Medium: 1
p07gbar 0:5c6eb2d20a5a 48 *
p07gbar 0:5c6eb2d20a5a 49 * Fast/Quick: 0.3
p07gbar 0:5c6eb2d20a5a 50 *
p07gbar 0:5c6eb2d20a5a 51 *
p07gbar 0:5c6eb2d20a5a 52 * Example:
p07gbar 0:5c6eb2d20a5a 53 * @code
p07gbar 0:5c6eb2d20a5a 54 * // Switches LED1 through the different modes
p07gbar 0:5c6eb2d20a5a 55 * #include "mbed.h"
p07gbar 0:5c6eb2d20a5a 56 * #include "Flasher.h"
p07gbar 0:5c6eb2d20a5a 57 *
p07gbar 0:5c6eb2d20a5a 58 * Flasher myFlasher(LED1, OFF); //Defines myFlasher on LED1 starting off
p07gbar 0:5c6eb2d20a5a 59 *
p07gbar 0:5c6eb2d20a5a 60 * int main() {
p07gbar 0:5c6eb2d20a5a 61 * while(1){
p07gbar 0:5c6eb2d20a5a 62 * wait(5);
p07gbar 1:e94a73b015cc 63 * myFlasher = ON;
p07gbar 0:5c6eb2d20a5a 64 * wait(5);
p07gbar 0:5c6eb2d20a5a 65 * myFlasher.updateFlash(SLOW);
p07gbar 0:5c6eb2d20a5a 66 * wait(5);
p07gbar 1:e94a73b015cc 67 * myFlasher = MEDIUM;
p07gbar 0:5c6eb2d20a5a 68 * wait(5);
p07gbar 0:5c6eb2d20a5a 69 * myFlasher.updateFlash(QUICK);
p07gbar 0:5c6eb2d20a5a 70 * wait(5);
p07gbar 0:5c6eb2d20a5a 71 * myFlasher.onFor(3,ON,MEDIUM);
p07gbar 0:5c6eb2d20a5a 72 * wait(5);
p07gbar 0:5c6eb2d20a5a 73 * myFlasher.pauseFor(2);
p07gbar 0:5c6eb2d20a5a 74 * wait(5);
p07gbar 0:5c6eb2d20a5a 75 * myFlasher.updateFlash(OFF);
p07gbar 0:5c6eb2d20a5a 76 * }
p07gbar 0:5c6eb2d20a5a 77 * }
p07gbar 0:5c6eb2d20a5a 78 * @endcode
p07gbar 0:5c6eb2d20a5a 79 */
p07gbar 0:5c6eb2d20a5a 80
p07gbar 0:5c6eb2d20a5a 81
p07gbar 0:5c6eb2d20a5a 82 class Flasher {
p07gbar 0:5c6eb2d20a5a 83
p07gbar 0:5c6eb2d20a5a 84 public:
p07gbar 0:5c6eb2d20a5a 85
p07gbar 0:5c6eb2d20a5a 86 /** Create a Flasher object attached to the specified Pin and Start State
p07gbar 0:5c6eb2d20a5a 87 *
p07gbar 0:5c6eb2d20a5a 88 * @param pin DigitalOut pin to connect the LED to
p07gbar 0:5c6eb2d20a5a 89 * @param startState State for the object to start in
p07gbar 0:5c6eb2d20a5a 90 *
p07gbar 0:5c6eb2d20a5a 91 */
p07gbar 0:5c6eb2d20a5a 92 Flasher(PinName pin, int startState);
p07gbar 0:5c6eb2d20a5a 93
p07gbar 0:5c6eb2d20a5a 94 /** Set new state for the obeject
p07gbar 0:5c6eb2d20a5a 95 *
p07gbar 0:5c6eb2d20a5a 96 * @param statein New State for the object
p07gbar 0:5c6eb2d20a5a 97 */
p07gbar 0:5c6eb2d20a5a 98
p07gbar 0:5c6eb2d20a5a 99 void updateFlash(int statein);
p07gbar 0:5c6eb2d20a5a 100
p07gbar 0:5c6eb2d20a5a 101 /** Read the current state of the object
p07gbar 0:5c6eb2d20a5a 102 *
p07gbar 0:5c6eb2d20a5a 103 * @param returns The current state
p07gbar 0:5c6eb2d20a5a 104 */
p07gbar 0:5c6eb2d20a5a 105
p07gbar 0:5c6eb2d20a5a 106 int getState();
p07gbar 0:5c6eb2d20a5a 107
p07gbar 0:5c6eb2d20a5a 108 /** Turn the LED off for a specified period, returns to old state
p07gbar 0:5c6eb2d20a5a 109 *
p07gbar 0:5c6eb2d20a5a 110 * @param time Time in seconds to be off for
p07gbar 0:5c6eb2d20a5a 111 */
p07gbar 0:5c6eb2d20a5a 112
p07gbar 0:5c6eb2d20a5a 113 void pauseFor(float time);
p07gbar 0:5c6eb2d20a5a 114
p07gbar 0:5c6eb2d20a5a 115 /** Sets a new state for a while then returns to the return state
p07gbar 0:5c6eb2d20a5a 116 *
p07gbar 0:5c6eb2d20a5a 117 * @param time Time in seconds to be in new state for
p07gbar 0:5c6eb2d20a5a 118 * @param newState The new state for it to be in
p07gbar 0:5c6eb2d20a5a 119 * @param returnState The state for it to return to
p07gbar 0:5c6eb2d20a5a 120 */
p07gbar 0:5c6eb2d20a5a 121
p07gbar 0:5c6eb2d20a5a 122 void onFor(float time, int newState, int returnState);
p07gbar 0:5c6eb2d20a5a 123
p07gbar 0:5c6eb2d20a5a 124 /** Stops the flasher until resume is called
p07gbar 0:5c6eb2d20a5a 125 */
p07gbar 0:5c6eb2d20a5a 126
p07gbar 0:5c6eb2d20a5a 127 void pause();
p07gbar 0:5c6eb2d20a5a 128
p07gbar 0:5c6eb2d20a5a 129 /** Resumes the flasher
p07gbar 0:5c6eb2d20a5a 130 */
p07gbar 0:5c6eb2d20a5a 131
p07gbar 0:5c6eb2d20a5a 132 void resume();
p07gbar 0:5c6eb2d20a5a 133
p07gbar 0:5c6eb2d20a5a 134 /** Configures the flash times for a specified state
p07gbar 0:5c6eb2d20a5a 135 *
p07gbar 0:5c6eb2d20a5a 136 * @param statein State to change
p07gbar 0:5c6eb2d20a5a 137 * @param newTime new flash period
p07gbar 0:5c6eb2d20a5a 138 */
p07gbar 0:5c6eb2d20a5a 139
p07gbar 0:5c6eb2d20a5a 140 void setFlashTime(int statein, float newTime);
p07gbar 0:5c6eb2d20a5a 141
p07gbar 0:5c6eb2d20a5a 142 /** Reads back the flash time for a state
p07gbar 0:5c6eb2d20a5a 143 *
p07gbar 0:5c6eb2d20a5a 144 * @param statein State to read back
p07gbar 0:5c6eb2d20a5a 145 * @param returns Time of that states flash
p07gbar 0:5c6eb2d20a5a 146 */
p07gbar 0:5c6eb2d20a5a 147
p07gbar 0:5c6eb2d20a5a 148 float getFlashTime(int statein);
p07gbar 0:5c6eb2d20a5a 149
p07gbar 1:e94a73b015cc 150 /** Sets state quickly
p07gbar 1:e94a73b015cc 151 *
p07gbar 1:e94a73b015cc 152 * @param statein State to change to
p07gbar 1:e94a73b015cc 153 */
p07gbar 0:5c6eb2d20a5a 154
p07gbar 1:e94a73b015cc 155 Flasher& operator= (int statein);
p07gbar 1:e94a73b015cc 156
p07gbar 1:e94a73b015cc 157 /** Gets State quickly
p07gbar 1:e94a73b015cc 158 *
p07gbar 1:e94a73b015cc 159 * @param returns Current state
p07gbar 1:e94a73b015cc 160 */
p07gbar 1:e94a73b015cc 161
p07gbar 1:e94a73b015cc 162 operator int();
p07gbar 0:5c6eb2d20a5a 163
p07gbar 0:5c6eb2d20a5a 164 private:
p07gbar 0:5c6eb2d20a5a 165
p07gbar 0:5c6eb2d20a5a 166 DigitalOut _led;
p07gbar 0:5c6eb2d20a5a 167
p07gbar 0:5c6eb2d20a5a 168 int state;
p07gbar 0:5c6eb2d20a5a 169
p07gbar 0:5c6eb2d20a5a 170 int returntoState;
p07gbar 0:5c6eb2d20a5a 171
p07gbar 0:5c6eb2d20a5a 172 bool active;
p07gbar 0:5c6eb2d20a5a 173
p07gbar 0:5c6eb2d20a5a 174 float forTime;
p07gbar 0:5c6eb2d20a5a 175
p07gbar 0:5c6eb2d20a5a 176 float flashTimes[NUMSTATES];
p07gbar 0:5c6eb2d20a5a 177
p07gbar 0:5c6eb2d20a5a 178 Ticker flashbase;
p07gbar 0:5c6eb2d20a5a 179
p07gbar 0:5c6eb2d20a5a 180 Timeout forbase;
p07gbar 0:5c6eb2d20a5a 181
p07gbar 0:5c6eb2d20a5a 182 void tick();
p07gbar 0:5c6eb2d20a5a 183
p07gbar 0:5c6eb2d20a5a 184 void timeout();
p07gbar 0:5c6eb2d20a5a 185
p07gbar 0:5c6eb2d20a5a 186 int checkState(int statein);
p07gbar 0:5c6eb2d20a5a 187
p07gbar 0:5c6eb2d20a5a 188 };
p07gbar 0:5c6eb2d20a5a 189
p07gbar 0:5c6eb2d20a5a 190 #endif
p07gbar 0:5c6eb2d20a5a 191
p07gbar 0:5c6eb2d20a5a 192
p07gbar 0:5c6eb2d20a5a 193