Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
LEDStatus.h@2:aa9a1377aa0d, 2020-04-07 (annotated)
- Committer:
- kabukistarship
- Date:
- Tue Apr 07 13:09:21 2020 +0000
- Revision:
- 2:aa9a1377aa0d
Switched to all UpperCamelCase.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kabukistarship | 2:aa9a1377aa0d | 1 | /* mbedBug @version 0.x |
kabukistarship | 2:aa9a1377aa0d | 2 | @link https://github.com/KabukiStarship/mbedBug.git |
kabukistarship | 2:aa9a1377aa0d | 3 | @file /led_status.h |
kabukistarship | 2:aa9a1377aa0d | 4 | @author Cale McCollough <https://cale-mccollough.github.io> |
kabukistarship | 2:aa9a1377aa0d | 5 | @license Copyright 2016-20 (C) Kabuki Starship <kabukistarship.com>; all rights |
kabukistarship | 2:aa9a1377aa0d | 6 | reserved (R). This Source Code Form is subject to the terms of the Mozilla |
kabukistarship | 2:aa9a1377aa0d | 7 | Public License, v. 2.0. If a copy of the MPL was not distributed with this file, |
kabukistarship | 2:aa9a1377aa0d | 8 | You can obtain one at <https://mozilla.org/MPL/2.0/>. */ |
kabukistarship | 2:aa9a1377aa0d | 9 | #ifndef _mbedBug_StatusLED_header |
kabukistarship | 2:aa9a1377aa0d | 10 | #define _mbedBug_StatusLED_header |
kabukistarship | 2:aa9a1377aa0d | 11 | #define _Debug 0 //< Use this flag to turn this library into a debug example program. @see mbedBug.cpp:int main () |
kabukistarship | 2:aa9a1377aa0d | 12 | #include <mbed.h> |
kabukistarship | 2:aa9a1377aa0d | 13 | #include <stdint.h> |
kabukistarship | 2:aa9a1377aa0d | 14 | #define _CreateStatusLED \ |
kabukistarship | 2:aa9a1377aa0d | 15 | static StatusLED<0,1> Status (GREEN_LED);\ |
kabukistarship | 2:aa9a1377aa0d | 16 | |
kabukistarship | 2:aa9a1377aa0d | 17 | #define ASSERT(STATEMENT, MESSAGE) {\ |
kabukistarship | 2:aa9a1377aa0d | 18 | if (!(STATEMENT)) {\ |
kabukistarship | 2:aa9a1377aa0d | 19 | printf("ASSERT: %s\r\n%s, line %d\r\n", #MESSAGE, __FILE__, __LINE__)\ |
kabukistarship | 2:aa9a1377aa0d | 20 | Status.HandleAssert ()\ |
kabukistarship | 2:aa9a1377aa0d | 21 | while (true)\ |
kabukistarship | 2:aa9a1377aa0d | 22 | }\ |
kabukistarship | 2:aa9a1377aa0d | 23 | } |
kabukistarship | 2:aa9a1377aa0d | 24 | |
kabukistarship | 2:aa9a1377aa0d | 25 | namespace mbedBug { |
kabukistarship | 2:aa9a1377aa0d | 26 | |
kabukistarship | 2:aa9a1377aa0d | 27 | /* Outputs the firmware Status using the LED on the mbed board. |
kabukistarship | 2:aa9a1377aa0d | 28 | This class works by using strings with ASCII Mores Code. Each char in a |
kabukistarship | 2:aa9a1377aa0d | 29 | represents a pulse split into 4 lengths. |
kabukistarship | 2:aa9a1377aa0d | 30 | |
kabukistarship | 2:aa9a1377aa0d | 31 | | Frame | ASCII | Index | Duty Cycle | |
kabukistarship | 2:aa9a1377aa0d | 32 | |:-----:|:-----:|:-----:|:----------:| |
kabukistarship | 2:aa9a1377aa0d | 33 | | Off | ' ' | <= 44 | 0% | |
kabukistarship | 2:aa9a1377aa0d | 34 | | Long | '-' | 45 | 1/3 | |
kabukistarship | 2:aa9a1377aa0d | 35 | | Short | '.' | 46 | 1/3 | |
kabukistarship | 2:aa9a1377aa0d | 36 | | On | '_' | >= 47 | 100% | |
kabukistarship | 2:aa9a1377aa0d | 37 | |
kabukistarship | 2:aa9a1377aa0d | 38 | Off could be any value less than 44, and On could be any value greater than |
kabukistarship | 2:aa9a1377aa0d | 39 | 47, but ASCII space (' ') and Period ('.') are used by convention because |
kabukistarship | 2:aa9a1377aa0d | 40 | they look like the pulse widths. |
kabukistarship | 2:aa9a1377aa0d | 41 | |
kabukistarship | 2:aa9a1377aa0d | 42 | ## Terminology |
kabukistarship | 2:aa9a1377aa0d | 43 | * Frame - Each character in a char Sequence represents 3 timer interrupts. |
kabukistarship | 2:aa9a1377aa0d | 44 | * Pattern - A null-terminated string of frames. |
kabukistarship | 2:aa9a1377aa0d | 45 | * Sequence - A null-terminated string of const char*. |
kabukistarship | 2:aa9a1377aa0d | 46 | |
kabukistarship | 2:aa9a1377aa0d | 47 | @code |
kabukistarship | 2:aa9a1377aa0d | 48 | StatusLED<0, 1> stausLED (); //< Use <0, 1> if you're LED is active low. |
kabukistarship | 2:aa9a1377aa0d | 49 | StatusLED<1, 0> stausLED (LED_2); //< Use <0, 1> if you're LED is active high. |
kabukistarship | 2:aa9a1377aa0d | 50 | |
kabukistarship | 2:aa9a1377aa0d | 51 | const char* ExamplePattern[] = { |
kabukistarship | 2:aa9a1377aa0d | 52 | "... ", //< Blinks fast three times in a row. |
kabukistarship | 2:aa9a1377aa0d | 53 | "...---... ", //< SOS in Mores Code. |
kabukistarship | 2:aa9a1377aa0d | 54 | "____ ", //< Slowly blinks on and off. |
kabukistarship | 2:aa9a1377aa0d | 55 | 0 //< Must have null-termination pointer. |
kabukistarship | 2:aa9a1377aa0d | 56 | }; |
kabukistarship | 2:aa9a1377aa0d | 57 | |
kabukistarship | 2:aa9a1377aa0d | 58 | statusLED.SetPattern (exapmlePattern, 1.5f); |
kabukistarship | 2:aa9a1377aa0d | 59 | |
kabukistarship | 2:aa9a1377aa0d | 60 | @endcode |
kabukistarship | 2:aa9a1377aa0d | 61 | */ |
kabukistarship | 2:aa9a1377aa0d | 62 | template <int On, int Off> |
kabukistarship | 2:aa9a1377aa0d | 63 | class StatusLED { |
kabukistarship | 2:aa9a1377aa0d | 64 | public: |
kabukistarship | 2:aa9a1377aa0d | 65 | |
kabukistarship | 2:aa9a1377aa0d | 66 | char Count, //< Counter counts from from 1-3. |
kabukistarship | 2:aa9a1377aa0d | 67 | Period; //< The current Period char. |
kabukistarship | 2:aa9a1377aa0d | 68 | |
kabukistarship | 2:aa9a1377aa0d | 69 | float Frequency; //< The Period length |
kabukistarship | 2:aa9a1377aa0d | 70 | |
kabukistarship | 2:aa9a1377aa0d | 71 | const char** Sequence; //< Null-terminated string of pointers. |
kabukistarship | 2:aa9a1377aa0d | 72 | |
kabukistarship | 2:aa9a1377aa0d | 73 | const char* Pattern, //< The current string in the Sequence. |
kabukistarship | 2:aa9a1377aa0d | 74 | * Cursor; //< The current char in the current string. |
kabukistarship | 2:aa9a1377aa0d | 75 | |
kabukistarship | 2:aa9a1377aa0d | 76 | DigitalOut Pin; //< Red LED on the mbed board. |
kabukistarship | 2:aa9a1377aa0d | 77 | |
kabukistarship | 2:aa9a1377aa0d | 78 | Ticker Blinker; //< Ticker for blinking the LEDs. |
kabukistarship | 2:aa9a1377aa0d | 79 | |
kabukistarship | 2:aa9a1377aa0d | 80 | static const float FrequencyDefault = 0.5f, //< Default Frequency in hertz. |
kabukistarship | 2:aa9a1377aa0d | 81 | FrequencyMin = 0.01f, //< Min Frequency in hertz. |
kabukistarship | 2:aa9a1377aa0d | 82 | FrequencyMax = 2.0f; //< Max Frequency in hertz. |
kabukistarship | 2:aa9a1377aa0d | 83 | |
kabukistarship | 2:aa9a1377aa0d | 84 | typedef enum { |
kabukistarship | 2:aa9a1377aa0d | 85 | Off = 0, |
kabukistarship | 2:aa9a1377aa0d | 86 | Short = 63, |
kabukistarship | 2:aa9a1377aa0d | 87 | Long = 127, |
kabukistarship | 2:aa9a1377aa0d | 88 | On = 255 |
kabukistarship | 2:aa9a1377aa0d | 89 | } Pulse; |
kabukistarship | 2:aa9a1377aa0d | 90 | |
kabukistarship | 2:aa9a1377aa0d | 91 | /* Simple constructor. */ |
kabukistarship | 2:aa9a1377aa0d | 92 | StatusLED (PinName LEDPin = LED1, float Frequency = FrequencyDefault) |
kabukistarship | 2:aa9a1377aa0d | 93 | : Count (0), |
kabukistarship | 2:aa9a1377aa0d | 94 | Period (0), |
kabukistarship | 2:aa9a1377aa0d | 95 | Sequence (0), |
kabukistarship | 2:aa9a1377aa0d | 96 | Pattern (0), |
kabukistarship | 2:aa9a1377aa0d | 97 | Cursor (0), |
kabukistarship | 2:aa9a1377aa0d | 98 | Frequency (Frequency), |
kabukistarship | 2:aa9a1377aa0d | 99 | Pin (LEDPin, Off) { |
kabukistarship | 2:aa9a1377aa0d | 100 | /// Nothing to do here. |
kabukistarship | 2:aa9a1377aa0d | 101 | } |
kabukistarship | 2:aa9a1377aa0d | 102 | |
kabukistarship | 2:aa9a1377aa0d | 103 | /* Sets the light blinking Sequence. */ |
kabukistarship | 2:aa9a1377aa0d | 104 | void SetSequence (char** SequenceNew) { |
kabukistarship | 2:aa9a1377aa0d | 105 | if (!SequenceNew) { |
kabukistarship | 2:aa9a1377aa0d | 106 | Sequence = 0; |
kabukistarship | 2:aa9a1377aa0d | 107 | StopBlinking (); |
kabukistarship | 2:aa9a1377aa0d | 108 | return; |
kabukistarship | 2:aa9a1377aa0d | 109 | } |
kabukistarship | 2:aa9a1377aa0d | 110 | |
kabukistarship | 2:aa9a1377aa0d | 111 | const char* TempString = Sequence[0]; |
kabukistarship | 2:aa9a1377aa0d | 112 | |
kabukistarship | 2:aa9a1377aa0d | 113 | if (TempString == 0 || TempString[0] == 0) { |
kabukistarship | 2:aa9a1377aa0d | 114 | #if _Debug |
kabukistarship | 2:aa9a1377aa0d | 115 | printf ("\r\n\nError: First Sequence and first char can't be null.\r\n\n"); |
kabukistarship | 2:aa9a1377aa0d | 116 | #endif |
kabukistarship | 2:aa9a1377aa0d | 117 | return; |
kabukistarship | 2:aa9a1377aa0d | 118 | } |
kabukistarship | 2:aa9a1377aa0d | 119 | Sequence = SequenceNew; |
kabukistarship | 2:aa9a1377aa0d | 120 | Pattern = SequenceNew[0]; |
kabukistarship | 2:aa9a1377aa0d | 121 | Cursor = Pattern; |
kabukistarship | 2:aa9a1377aa0d | 122 | CurrentByte = *Cursor; |
kabukistarship | 2:aa9a1377aa0d | 123 | Update (); |
kabukistarship | 2:aa9a1377aa0d | 124 | } |
kabukistarship | 2:aa9a1377aa0d | 125 | |
kabukistarship | 2:aa9a1377aa0d | 126 | /* Turns off the Blinker. */ |
kabukistarship | 2:aa9a1377aa0d | 127 | void TurnOff () { |
kabukistarship | 2:aa9a1377aa0d | 128 | Pin = Off; |
kabukistarship | 2:aa9a1377aa0d | 129 | } |
kabukistarship | 2:aa9a1377aa0d | 130 | |
kabukistarship | 2:aa9a1377aa0d | 131 | /* Turns on the Blinker. */ |
kabukistarship | 2:aa9a1377aa0d | 132 | void TurnOn () { |
kabukistarship | 2:aa9a1377aa0d | 133 | Color = ColorA; |
kabukistarship | 2:aa9a1377aa0d | 134 | Update (); |
kabukistarship | 2:aa9a1377aa0d | 135 | } |
kabukistarship | 2:aa9a1377aa0d | 136 | |
kabukistarship | 2:aa9a1377aa0d | 137 | /* Starts flashing the SOS Sequence. */ |
kabukistarship | 2:aa9a1377aa0d | 138 | void FlashSOS () { |
kabukistarship | 2:aa9a1377aa0d | 139 | Sequence = SoSPattern (); |
kabukistarship | 2:aa9a1377aa0d | 140 | Cursor = Sequence[0]; |
kabukistarship | 2:aa9a1377aa0d | 141 | Cursor = *Cursor; |
kabukistarship | 2:aa9a1377aa0d | 142 | Period = *Cursor; |
kabukistarship | 2:aa9a1377aa0d | 143 | } |
kabukistarship | 2:aa9a1377aa0d | 144 | |
kabukistarship | 2:aa9a1377aa0d | 145 | /* Starts blinking. */ |
kabukistarship | 2:aa9a1377aa0d | 146 | void StartBlinking () { |
kabukistarship | 2:aa9a1377aa0d | 147 | const char* _pattern = Sequence[0]; |
kabukistarship | 2:aa9a1377aa0d | 148 | Pattern = _pattern; |
kabukistarship | 2:aa9a1377aa0d | 149 | Cursor = _pattern; |
kabukistarship | 2:aa9a1377aa0d | 150 | Period = *_pattern; |
kabukistarship | 2:aa9a1377aa0d | 151 | |
kabukistarship | 2:aa9a1377aa0d | 152 | Blinker.attach (this, &StatusLED::blink, Frequency / 4); |
kabukistarship | 2:aa9a1377aa0d | 153 | Update (); |
kabukistarship | 2:aa9a1377aa0d | 154 | } |
kabukistarship | 2:aa9a1377aa0d | 155 | |
kabukistarship | 2:aa9a1377aa0d | 156 | /* Stops blinking and turns off the LED. */ |
kabukistarship | 2:aa9a1377aa0d | 157 | void StopBlinking () { |
kabukistarship | 2:aa9a1377aa0d | 158 | TurnOff (); |
kabukistarship | 2:aa9a1377aa0d | 159 | Blinker.detach (); |
kabukistarship | 2:aa9a1377aa0d | 160 | Pin = Off; |
kabukistarship | 2:aa9a1377aa0d | 161 | Update (); |
kabukistarship | 2:aa9a1377aa0d | 162 | } |
kabukistarship | 2:aa9a1377aa0d | 163 | |
kabukistarship | 2:aa9a1377aa0d | 164 | /* Sets the blink Frequency. */ |
kabukistarship | 2:aa9a1377aa0d | 165 | void FrequencySet (float Value) { |
kabukistarship | 2:aa9a1377aa0d | 166 | Frequency = Value; |
kabukistarship | 2:aa9a1377aa0d | 167 | Blinker.attach (this, &StatusLED::Blink, Value); |
kabukistarship | 2:aa9a1377aa0d | 168 | } |
kabukistarship | 2:aa9a1377aa0d | 169 | |
kabukistarship | 2:aa9a1377aa0d | 170 | /* Handler for the ASSERT macro. */ |
kabukistarship | 2:aa9a1377aa0d | 171 | void HandleAssert () { |
kabukistarship | 2:aa9a1377aa0d | 172 | SetPattern (SoSPattern ()); |
kabukistarship | 2:aa9a1377aa0d | 173 | } |
kabukistarship | 2:aa9a1377aa0d | 174 | |
kabukistarship | 2:aa9a1377aa0d | 175 | /* Pattern blinks three times in a row. */ |
kabukistarship | 2:aa9a1377aa0d | 176 | const char** Blink3TimesPattern () { |
kabukistarship | 2:aa9a1377aa0d | 177 | static const char** Sequence = { "... ", 0 }; |
kabukistarship | 2:aa9a1377aa0d | 178 | return &Sequence; |
kabukistarship | 2:aa9a1377aa0d | 179 | } |
kabukistarship | 2:aa9a1377aa0d | 180 | |
kabukistarship | 2:aa9a1377aa0d | 181 | /* Standard blink Sequence. */ |
kabukistarship | 2:aa9a1377aa0d | 182 | const char** SlowBlinkPattern () { |
kabukistarship | 2:aa9a1377aa0d | 183 | static const char** Sequence = { "__ ", 0 }; |
kabukistarship | 2:aa9a1377aa0d | 184 | return &Sequence; |
kabukistarship | 2:aa9a1377aa0d | 185 | } |
kabukistarship | 2:aa9a1377aa0d | 186 | |
kabukistarship | 2:aa9a1377aa0d | 187 | /* Standard blink Sequence. */ |
kabukistarship | 2:aa9a1377aa0d | 188 | const char** FastBlinkPattern () { |
kabukistarship | 2:aa9a1377aa0d | 189 | static const char** Sequence = { "_ ", 0 }; |
kabukistarship | 2:aa9a1377aa0d | 190 | return &Sequence; |
kabukistarship | 2:aa9a1377aa0d | 191 | } |
kabukistarship | 2:aa9a1377aa0d | 192 | |
kabukistarship | 2:aa9a1377aa0d | 193 | /* Standard SOS Sequence. */ |
kabukistarship | 2:aa9a1377aa0d | 194 | const char** SoSPattern () { |
kabukistarship | 2:aa9a1377aa0d | 195 | static const char** Sequence = { "...---... ", 0 }; |
kabukistarship | 2:aa9a1377aa0d | 196 | return &Sequence; |
kabukistarship | 2:aa9a1377aa0d | 197 | } |
kabukistarship | 2:aa9a1377aa0d | 198 | |
kabukistarship | 2:aa9a1377aa0d | 199 | /* Returns the next char in the Sequence. */ |
kabukistarship | 2:aa9a1377aa0d | 200 | inline char GetNextPeriod () { |
kabukistarship | 2:aa9a1377aa0d | 201 | /// We've already checked that the Sequence and Cursor and not null. |
kabukistarship | 2:aa9a1377aa0d | 202 | |
kabukistarship | 2:aa9a1377aa0d | 203 | char period_temp = *(++Cursor); |
kabukistarship | 2:aa9a1377aa0d | 204 | |
kabukistarship | 2:aa9a1377aa0d | 205 | if (period_temp == 0) { |
kabukistarship | 2:aa9a1377aa0d | 206 | const char* temp_pattern = *(Pattern + sizeof (const char*)); |
kabukistarship | 2:aa9a1377aa0d | 207 | |
kabukistarship | 2:aa9a1377aa0d | 208 | if (!temp_pattern) { |
kabukistarship | 2:aa9a1377aa0d | 209 | const char* _cursor = Sequence[0]; |
kabukistarship | 2:aa9a1377aa0d | 210 | Cursor = Pattern = _cursor; |
kabukistarship | 2:aa9a1377aa0d | 211 | return *_cursor; |
kabukistarship | 2:aa9a1377aa0d | 212 | } |
kabukistarship | 2:aa9a1377aa0d | 213 | Pattern = temp_pattern; |
kabukistarship | 2:aa9a1377aa0d | 214 | return *temp_pattern; //< We don't particularly care if the Period is '\0'. |
kabukistarship | 2:aa9a1377aa0d | 215 | } |
kabukistarship | 2:aa9a1377aa0d | 216 | |
kabukistarship | 2:aa9a1377aa0d | 217 | return period_temp; |
kabukistarship | 2:aa9a1377aa0d | 218 | } |
kabukistarship | 2:aa9a1377aa0d | 219 | |
kabukistarship | 2:aa9a1377aa0d | 220 | /* Updates the Status LED. */ |
kabukistarship | 2:aa9a1377aa0d | 221 | inline void Update () { |
kabukistarship | 2:aa9a1377aa0d | 222 | const char* period_temp = Period; |
kabukistarship | 2:aa9a1377aa0d | 223 | if (!Sequence || !period_temp) return; |
kabukistarship | 2:aa9a1377aa0d | 224 | |
kabukistarship | 2:aa9a1377aa0d | 225 | if (Count == 0) { //< Beginning of cycle Period. |
kabukistarship | 2:aa9a1377aa0d | 226 | char _period = GetNextPeriod (); |
kabukistarship | 2:aa9a1377aa0d | 227 | Period = _period; |
kabukistarship | 2:aa9a1377aa0d | 228 | Count = 1; |
kabukistarship | 2:aa9a1377aa0d | 229 | if (_period < '-') { |
kabukistarship | 2:aa9a1377aa0d | 230 | Pin = Off; |
kabukistarship | 2:aa9a1377aa0d | 231 | return; |
kabukistarship | 2:aa9a1377aa0d | 232 | } |
kabukistarship | 2:aa9a1377aa0d | 233 | Pin = On; |
kabukistarship | 2:aa9a1377aa0d | 234 | return; |
kabukistarship | 2:aa9a1377aa0d | 235 | } |
kabukistarship | 2:aa9a1377aa0d | 236 | else if (Count == 1) { //< 1/3 duty cycle. |
kabukistarship | 2:aa9a1377aa0d | 237 | Count = 2; |
kabukistarship | 2:aa9a1377aa0d | 238 | if (Period == '.') { |
kabukistarship | 2:aa9a1377aa0d | 239 | Pin = Off; |
kabukistarship | 2:aa9a1377aa0d | 240 | return; |
kabukistarship | 2:aa9a1377aa0d | 241 | } |
kabukistarship | 2:aa9a1377aa0d | 242 | return; |
kabukistarship | 2:aa9a1377aa0d | 243 | } |
kabukistarship | 2:aa9a1377aa0d | 244 | /// 2/3 duty cycle. |
kabukistarship | 2:aa9a1377aa0d | 245 | Count = 0; |
kabukistarship | 2:aa9a1377aa0d | 246 | if (Period > '.') //< Leave the LED on |
kabukistarship | 2:aa9a1377aa0d | 247 | return; |
kabukistarship | 2:aa9a1377aa0d | 248 | Pin = Off; |
kabukistarship | 2:aa9a1377aa0d | 249 | } |
kabukistarship | 2:aa9a1377aa0d | 250 | }; |
kabukistarship | 2:aa9a1377aa0d | 251 | } |
kabukistarship | 2:aa9a1377aa0d | 252 | |
kabukistarship | 2:aa9a1377aa0d | 253 | // _D_e_m_o_____________________________________________________________________ |
kabukistarship | 2:aa9a1377aa0d | 254 | |
kabukistarship | 2:aa9a1377aa0d | 255 | #if 0 //< Set to non-zero to run this demo. |
kabukistarship | 2:aa9a1377aa0d | 256 | |
kabukistarship | 2:aa9a1377aa0d | 257 | using namespace mbedBug; |
kabukistarship | 2:aa9a1377aa0d | 258 | |
kabukistarship | 2:aa9a1377aa0d | 259 | StatusLED Status (); |
kabukistarship | 2:aa9a1377aa0d | 260 | InterruptIn switch3 (SW3); |
kabukistarship | 2:aa9a1377aa0d | 261 | |
kabukistarship | 2:aa9a1377aa0d | 262 | const char* ExamplePattern[] = { |
kabukistarship | 2:aa9a1377aa0d | 263 | "... ", //< Blinks fast three times in a row. |
kabukistarship | 2:aa9a1377aa0d | 264 | "...---... ", //< SOS in Mores Code. |
kabukistarship | 2:aa9a1377aa0d | 265 | "____ ", //< Slowly blinks on and off. |
kabukistarship | 2:aa9a1377aa0d | 266 | 0 //< Pattern must have null-term pointer. |
kabukistarship | 2:aa9a1377aa0d | 267 | }; |
kabukistarship | 2:aa9a1377aa0d | 268 | /* Interrupt handler for SW2. */ |
kabukistarship | 2:aa9a1377aa0d | 269 | void SwitchIRQHandler () { |
kabukistarship | 2:aa9a1377aa0d | 270 | static bool ExamplePatterMode = true; |
kabukistarship | 2:aa9a1377aa0d | 271 | |
kabukistarship | 2:aa9a1377aa0d | 272 | if (ExamplePatterMode) { |
kabukistarship | 2:aa9a1377aa0d | 273 | Status.SetPattern (ExamplePattern); |
kabukistarship | 2:aa9a1377aa0d | 274 | Status.StartBlinking (); |
kabukistarship | 2:aa9a1377aa0d | 275 | ExamplePatterMode = false; |
kabukistarship | 2:aa9a1377aa0d | 276 | } |
kabukistarship | 2:aa9a1377aa0d | 277 | else { |
kabukistarship | 2:aa9a1377aa0d | 278 | Status.SetPattern(Status.SOSPattern ())); |
kabukistarship | 2:aa9a1377aa0d | 279 | ExamplePatterMode = true; |
kabukistarship | 2:aa9a1377aa0d | 280 | } |
kabukistarship | 2:aa9a1377aa0d | 281 | } |
kabukistarship | 2:aa9a1377aa0d | 282 | |
kabukistarship | 2:aa9a1377aa0d | 283 | int main() { |
kabukistarship | 2:aa9a1377aa0d | 284 | printf ("\r\n\nTesting mbed Utils.\r\n\n"); |
kabukistarship | 2:aa9a1377aa0d | 285 | PrintLine (); |
kabukistarship | 2:aa9a1377aa0d | 286 | |
kabukistarship | 2:aa9a1377aa0d | 287 | switch3.rise (&SwitchIRQHandler); |
kabukistarship | 2:aa9a1377aa0d | 288 | //Status.StartBlinking () |
kabukistarship | 2:aa9a1377aa0d | 289 | |
kabukistarship | 2:aa9a1377aa0d | 290 | while (true); |
kabukistarship | 2:aa9a1377aa0d | 291 | } |
kabukistarship | 2:aa9a1377aa0d | 292 | |
kabukistarship | 2:aa9a1377aa0d | 293 | #endif //< Demo |
kabukistarship | 2:aa9a1377aa0d | 294 | #endif |