complete
Dependencies: 4DGL-uLCD-SE_ PinDetect SDFileSystem mbed
Fork of mythermostat by
main.cpp@6:5ba4232c5e1c, 2016-11-06 (annotated)
- Committer:
- jboettcher
- Date:
- Sun Nov 06 22:08:58 2016 +0000
- Revision:
- 6:5ba4232c5e1c
- Parent:
- 5:c73ebb00e86d
Complete
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180_1 | 0:cc87c48aa43c | 1 | #include "mbed.h" |
4180_1 | 2:58d85409f7ff | 2 | #include "TMP36.h" |
4180_1 | 2:58d85409f7ff | 3 | #include "SDFileSystem.h" |
4180_1 | 4:9a4d22a279b3 | 4 | #include "uLCD_4DGL.h" |
4180_1 | 0:cc87c48aa43c | 5 | #include "PinDetect.h" |
4180_1 | 2:58d85409f7ff | 6 | #include "Speaker.h" |
4180_1 | 2:58d85409f7ff | 7 | #include "Shiftbrite.h" |
jboettcher | 5:c73ebb00e86d | 8 | #include <math.h> |
jboettcher | 5:c73ebb00e86d | 9 | #include <iostream> |
jboettcher | 5:c73ebb00e86d | 10 | #include "stdio.h" |
4180_1 | 2:58d85409f7ff | 11 | |
4180_1 | 2:58d85409f7ff | 12 | // use class to setup temperature sensor pins |
4180_1 | 2:58d85409f7ff | 13 | TMP36 myTMP36(p15); //Analog in |
4180_1 | 0:cc87c48aa43c | 14 | |
4180_1 | 2:58d85409f7ff | 15 | // use class to setup microSD card filesystem |
4180_1 | 2:58d85409f7ff | 16 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
4180_1 | 2:58d85409f7ff | 17 | |
4180_1 | 4:9a4d22a279b3 | 18 | // use class to setup the Color LCD |
4180_1 | 4:9a4d22a279b3 | 19 | uLCD_4DGL uLCD(p28, p27, p29); // create a global uLCD object |
4180_1 | 2:58d85409f7ff | 20 | |
4180_1 | 2:58d85409f7ff | 21 | // use class to setup pushbuttons pins |
4180_1 | 4:9a4d22a279b3 | 22 | PinDetect pb1(p23); |
4180_1 | 4:9a4d22a279b3 | 23 | PinDetect pb2(p24); |
4180_1 | 4:9a4d22a279b3 | 24 | PinDetect pb3(p25); |
jboettcher | 5:c73ebb00e86d | 25 | PinDetect pb4(p26); |
4180_1 | 2:58d85409f7ff | 26 | |
4180_1 | 2:58d85409f7ff | 27 | // use class to setup speaker pin |
4180_1 | 2:58d85409f7ff | 28 | Speaker mySpeaker(p21); //PWM out |
4180_1 | 0:cc87c48aa43c | 29 | |
4180_1 | 2:58d85409f7ff | 30 | // use class to setup Shiftbrite pins |
4180_1 | 2:58d85409f7ff | 31 | Shiftbrite myShiftbrite(p9, p10, p11, p12, p13);// ei li di n/c ci |
4180_1 | 2:58d85409f7ff | 32 | |
4180_1 | 2:58d85409f7ff | 33 | // use class to setup Mbed's four on-board LEDs |
4180_1 | 2:58d85409f7ff | 34 | DigitalOut myLED1(LED1); |
4180_1 | 2:58d85409f7ff | 35 | DigitalOut myLED2(LED2); |
4180_1 | 2:58d85409f7ff | 36 | DigitalOut myLED3(LED3); |
4180_1 | 2:58d85409f7ff | 37 | DigitalOut myLED4(LED4); |
4180_1 | 2:58d85409f7ff | 38 | |
4180_1 | 2:58d85409f7ff | 39 | //also setting any unused analog input pins to digital outputs reduces A/D noise a bit |
4180_1 | 2:58d85409f7ff | 40 | //see http://mbed.org/users/chris/notebook/Getting-best-ADC-performance/ |
4180_1 | 2:58d85409f7ff | 41 | DigitalOut P16(p16); |
4180_1 | 2:58d85409f7ff | 42 | DigitalOut P17(p17); |
jboettcher | 5:c73ebb00e86d | 43 | DigitalOut bluepin(p18); |
jboettcher | 5:c73ebb00e86d | 44 | DigitalOut greenpin(p19); |
jboettcher | 5:c73ebb00e86d | 45 | DigitalOut redpin(p20); |
4180_1 | 2:58d85409f7ff | 46 | |
4180_1 | 2:58d85409f7ff | 47 | // Global variables used in callbacks and main program |
4180_1 | 2:58d85409f7ff | 48 | // C variables in interrupt routines should use volatile keyword |
jboettcher | 5:c73ebb00e86d | 49 | //int volatile heat_setting=78; // heat to temp |
jboettcher | 5:c73ebb00e86d | 50 | //int volatile cool_setting=68; // cool to temp |
jboettcher | 5:c73ebb00e86d | 51 | //bool volatile mode=false; // heat or cool mode |
jboettcher | 5:c73ebb00e86d | 52 | int target_temp; |
jboettcher | 5:c73ebb00e86d | 53 | int Prior_temp = 75; |
jboettcher | 5:c73ebb00e86d | 54 | double tempF = 75; |
jboettcher | 5:c73ebb00e86d | 55 | int volatile heat_setpoint = 77; |
jboettcher | 5:c73ebb00e86d | 56 | int volatile cool_setpoint = 68; |
jboettcher | 5:c73ebb00e86d | 57 | int volatile heat_setpoint_C = 25; |
jboettcher | 5:c73ebb00e86d | 58 | int volatile cool_setpoint_C = 20; |
jboettcher | 5:c73ebb00e86d | 59 | int mode = 0; |
jboettcher | 5:c73ebb00e86d | 60 | int centigrade = 0; |
4180_1 | 0:cc87c48aa43c | 61 | |
4180_1 | 1:768b8bd42e33 | 62 | // Callback routine is interrupt activated by a debounced pb1 hit |
4180_1 | 2:58d85409f7ff | 63 | void pb1_hit_callback (void) |
4180_1 | 2:58d85409f7ff | 64 | { |
jboettcher | 5:c73ebb00e86d | 65 | target_temp++; |
jboettcher | 5:c73ebb00e86d | 66 | mySpeaker.PlayNote(2000.0, 0.05, 1.0); |
4180_1 | 0:cc87c48aa43c | 67 | } |
4180_1 | 1:768b8bd42e33 | 68 | // Callback routine is interrupt activated by a debounced pb2 hit |
4180_1 | 2:58d85409f7ff | 69 | void pb2_hit_callback (void) |
4180_1 | 2:58d85409f7ff | 70 | { |
jboettcher | 5:c73ebb00e86d | 71 | target_temp--; |
jboettcher | 5:c73ebb00e86d | 72 | mySpeaker.PlayNote(2000.0, 0.05, 1.0); |
4180_1 | 2:58d85409f7ff | 73 | } |
4180_1 | 2:58d85409f7ff | 74 | // Callback routine is interrupt activated by a debounced pb3 hit |
4180_1 | 2:58d85409f7ff | 75 | void pb3_hit_callback (void) |
4180_1 | 2:58d85409f7ff | 76 | { |
jboettcher | 5:c73ebb00e86d | 77 | mode = (mode + 1) % 3; // Cycle forward by 1 |
jboettcher | 5:c73ebb00e86d | 78 | mySpeaker.PlayNote(3000.0, 0.025, 1.0); |
4180_1 | 1:768b8bd42e33 | 79 | } |
jboettcher | 5:c73ebb00e86d | 80 | void pb4_hit_callback (void) |
jboettcher | 5:c73ebb00e86d | 81 | { |
jboettcher | 5:c73ebb00e86d | 82 | wait(.001); |
jboettcher | 5:c73ebb00e86d | 83 | centigrade = (centigrade + 1) % 2; |
jboettcher | 5:c73ebb00e86d | 84 | } |
4180_1 | 0:cc87c48aa43c | 85 | |
4180_1 | 2:58d85409f7ff | 86 | int main() |
4180_1 | 2:58d85409f7ff | 87 | { |
4180_1 | 2:58d85409f7ff | 88 | float Current_temp=0.0; |
4180_1 | 2:58d85409f7ff | 89 | |
4180_1 | 2:58d85409f7ff | 90 | // Use internal pullups for the three pushbuttons |
4180_1 | 2:58d85409f7ff | 91 | pb1.mode(PullUp); |
4180_1 | 1:768b8bd42e33 | 92 | pb2.mode(PullUp); |
4180_1 | 2:58d85409f7ff | 93 | pb3.mode(PullUp); |
jboettcher | 5:c73ebb00e86d | 94 | pb4.mode(PullUp); |
4180_1 | 0:cc87c48aa43c | 95 | // Delay for initial pullup to take effect |
4180_1 | 0:cc87c48aa43c | 96 | wait(.01); |
4180_1 | 1:768b8bd42e33 | 97 | // Setup Interrupt callback functions for a pb hit |
4180_1 | 1:768b8bd42e33 | 98 | pb1.attach_deasserted(&pb1_hit_callback); |
4180_1 | 1:768b8bd42e33 | 99 | pb2.attach_deasserted(&pb2_hit_callback); |
4180_1 | 3:346ef671ef28 | 100 | pb3.attach_deasserted(&pb3_hit_callback); |
jboettcher | 5:c73ebb00e86d | 101 | pb4.attach_deasserted(&pb4_hit_callback); |
4180_1 | 1:768b8bd42e33 | 102 | // Start sampling pb inputs using interrupts |
4180_1 | 1:768b8bd42e33 | 103 | pb1.setSampleFrequency(); |
4180_1 | 1:768b8bd42e33 | 104 | pb2.setSampleFrequency(); |
4180_1 | 3:346ef671ef28 | 105 | pb3.setSampleFrequency(); |
jboettcher | 5:c73ebb00e86d | 106 | pb4.setSampleFrequency(); |
4180_1 | 2:58d85409f7ff | 107 | // pushbuttons now setup and running |
jboettcher | 5:c73ebb00e86d | 108 | |
4180_1 | 4:9a4d22a279b3 | 109 | printf("Hello PC World\n\r"); // need terminal application running on PC to see this output |
jboettcher | 5:c73ebb00e86d | 110 | uLCD.printf("\n\rJoe's Thermostat\n\r"); // LCD |
4180_1 | 2:58d85409f7ff | 111 | mySpeaker.PlayNote(500.0, 1.0, 1.0); // Speaker buzz |
jboettcher | 6:5ba4232c5e1c | 112 | enum Statetype { Off = 0, Heat_off, Heat_on, Cool_off, Cool_on }; |
jboettcher | 6:5ba4232c5e1c | 113 | Statetype state = Off; |
jboettcher | 6:5ba4232c5e1c | 114 | uLCD.locate(3,6); |
jboettcher | 6:5ba4232c5e1c | 115 | uLCD.printf("OFF "); |
4180_1 | 3:346ef671ef28 | 116 | // State machine code below will need changes and additions |
4180_1 | 0:cc87c48aa43c | 117 | while (1) { |
jboettcher | 5:c73ebb00e86d | 118 | |
jboettcher | 5:c73ebb00e86d | 119 | while(1) { |
jboettcher | 5:c73ebb00e86d | 120 | Prior_temp = tempF; |
jboettcher | 5:c73ebb00e86d | 121 | Current_temp = myTMP36; //Read temp sensor |
jboettcher | 5:c73ebb00e86d | 122 | tempF = (9.0*Current_temp)/5.0+ 32.0; |
jboettcher | 5:c73ebb00e86d | 123 | double tempC = Current_temp; |
jboettcher | 5:c73ebb00e86d | 124 | |
jboettcher | 5:c73ebb00e86d | 125 | |
jboettcher | 5:c73ebb00e86d | 126 | switch (mode) { |
jboettcher | 5:c73ebb00e86d | 127 | case (0): |
jboettcher | 5:c73ebb00e86d | 128 | uLCD.locate(3,6); |
jboettcher | 5:c73ebb00e86d | 129 | uLCD.printf("OFF "); |
jboettcher | 5:c73ebb00e86d | 130 | //target_temp = 75; |
jboettcher | 5:c73ebb00e86d | 131 | break; |
jboettcher | 5:c73ebb00e86d | 132 | case (1): |
jboettcher | 5:c73ebb00e86d | 133 | uLCD.locate(3,6); |
jboettcher | 5:c73ebb00e86d | 134 | uLCD.color(RED); |
jboettcher | 5:c73ebb00e86d | 135 | uLCD.printf("HEAT "); |
jboettcher | 5:c73ebb00e86d | 136 | uLCD.color(GREEN); |
jboettcher | 5:c73ebb00e86d | 137 | //if (centigrade == 0) |
jboettcher | 5:c73ebb00e86d | 138 | // target_temp = heat_setpoint; |
jboettcher | 5:c73ebb00e86d | 139 | //else |
jboettcher | 5:c73ebb00e86d | 140 | // target_temp = heat_setpoint_C; |
jboettcher | 5:c73ebb00e86d | 141 | break; |
jboettcher | 5:c73ebb00e86d | 142 | case (2): |
jboettcher | 5:c73ebb00e86d | 143 | uLCD.locate(3,6); |
jboettcher | 5:c73ebb00e86d | 144 | uLCD.color(LBLUE); |
jboettcher | 5:c73ebb00e86d | 145 | uLCD.printf("COOL "); |
jboettcher | 5:c73ebb00e86d | 146 | uLCD.color(GREEN); |
jboettcher | 5:c73ebb00e86d | 147 | // if (centigrade == 0) |
jboettcher | 5:c73ebb00e86d | 148 | // target_temp = cool_setpoint; |
jboettcher | 5:c73ebb00e86d | 149 | //else |
jboettcher | 5:c73ebb00e86d | 150 | // target_temp = cool_setpoint_C; |
jboettcher | 5:c73ebb00e86d | 151 | break; |
jboettcher | 5:c73ebb00e86d | 152 | } |
jboettcher | 5:c73ebb00e86d | 153 | |
jboettcher | 5:c73ebb00e86d | 154 | |
jboettcher | 5:c73ebb00e86d | 155 | |
jboettcher | 5:c73ebb00e86d | 156 | if (centigrade == 1) |
jboettcher | 5:c73ebb00e86d | 157 | tempF = tempC; |
jboettcher | 5:c73ebb00e86d | 158 | //tempF = round(tempF); |
jboettcher | 5:c73ebb00e86d | 159 | |
jboettcher | 5:c73ebb00e86d | 160 | uLCD.locate(2,10); |
jboettcher | 5:c73ebb00e86d | 161 | if (centigrade == 0) |
jboettcher | 5:c73ebb00e86d | 162 | { |
jboettcher | 5:c73ebb00e86d | 163 | uLCD.text_width(2); |
jboettcher | 5:c73ebb00e86d | 164 | uLCD.text_height(2); |
jboettcher | 5:c73ebb00e86d | 165 | uLCD.printf("%5.0F F \n\r", tempF); |
jboettcher | 5:c73ebb00e86d | 166 | uLCD.text_width(1); |
jboettcher | 5:c73ebb00e86d | 167 | uLCD.text_height(1); |
jboettcher | 5:c73ebb00e86d | 168 | } |
jboettcher | 5:c73ebb00e86d | 169 | if (centigrade == 1) |
jboettcher | 5:c73ebb00e86d | 170 | { |
jboettcher | 5:c73ebb00e86d | 171 | uLCD.text_width(2); |
jboettcher | 5:c73ebb00e86d | 172 | uLCD.text_height(2); |
jboettcher | 5:c73ebb00e86d | 173 | uLCD.printf("%5.0F C \n\r", tempC); |
jboettcher | 5:c73ebb00e86d | 174 | uLCD.text_width(1); |
jboettcher | 5:c73ebb00e86d | 175 | uLCD.text_height(1); |
jboettcher | 5:c73ebb00e86d | 176 | } |
jboettcher | 5:c73ebb00e86d | 177 | |
jboettcher | 5:c73ebb00e86d | 178 | if (mode == 0) |
jboettcher | 5:c73ebb00e86d | 179 | { |
jboettcher | 5:c73ebb00e86d | 180 | state = Off; |
jboettcher | 5:c73ebb00e86d | 181 | greenpin = 1; |
jboettcher | 5:c73ebb00e86d | 182 | redpin = 0; |
jboettcher | 5:c73ebb00e86d | 183 | bluepin = 0; |
jboettcher | 5:c73ebb00e86d | 184 | } |
jboettcher | 5:c73ebb00e86d | 185 | if (mode == 1) |
jboettcher | 5:c73ebb00e86d | 186 | { |
jboettcher | 5:c73ebb00e86d | 187 | if (tempF > target_temp + 1) |
jboettcher | 5:c73ebb00e86d | 188 | { |
jboettcher | 5:c73ebb00e86d | 189 | if (Prior_temp < target_temp + 1) |
jboettcher | 5:c73ebb00e86d | 190 | { |
jboettcher | 5:c73ebb00e86d | 191 | mySpeaker.PlayNote(500.0, 0.025, 1.0); |
jboettcher | 5:c73ebb00e86d | 192 | } |
jboettcher | 5:c73ebb00e86d | 193 | greenpin = 0; |
jboettcher | 5:c73ebb00e86d | 194 | redpin = 0; |
jboettcher | 5:c73ebb00e86d | 195 | bluepin = 0; |
jboettcher | 5:c73ebb00e86d | 196 | state = Heat_off; |
jboettcher | 5:c73ebb00e86d | 197 | } |
jboettcher | 5:c73ebb00e86d | 198 | if (tempF < target_temp - 1) |
jboettcher | 5:c73ebb00e86d | 199 | { |
jboettcher | 5:c73ebb00e86d | 200 | if (Prior_temp > target_temp - 1) |
jboettcher | 5:c73ebb00e86d | 201 | { |
jboettcher | 5:c73ebb00e86d | 202 | mySpeaker.PlayNote(500.0, 0.025, 1.0); |
jboettcher | 5:c73ebb00e86d | 203 | } |
jboettcher | 5:c73ebb00e86d | 204 | greenpin = 0; |
jboettcher | 5:c73ebb00e86d | 205 | redpin = 1; |
jboettcher | 5:c73ebb00e86d | 206 | bluepin = 0; |
jboettcher | 5:c73ebb00e86d | 207 | state = Heat_on; |
jboettcher | 5:c73ebb00e86d | 208 | } |
jboettcher | 5:c73ebb00e86d | 209 | } |
jboettcher | 5:c73ebb00e86d | 210 | if (mode == 2) |
jboettcher | 5:c73ebb00e86d | 211 | { |
jboettcher | 5:c73ebb00e86d | 212 | if (tempF > target_temp + 1) |
jboettcher | 5:c73ebb00e86d | 213 | { |
jboettcher | 5:c73ebb00e86d | 214 | if (Prior_temp < target_temp + 1) |
jboettcher | 5:c73ebb00e86d | 215 | { |
jboettcher | 5:c73ebb00e86d | 216 | mySpeaker.PlayNote(1000.0, 0.025, 1.0); |
jboettcher | 5:c73ebb00e86d | 217 | } |
jboettcher | 5:c73ebb00e86d | 218 | greenpin = 0; |
jboettcher | 5:c73ebb00e86d | 219 | redpin = 0; |
jboettcher | 5:c73ebb00e86d | 220 | bluepin = 1; |
jboettcher | 5:c73ebb00e86d | 221 | state = Cool_on; |
jboettcher | 5:c73ebb00e86d | 222 | } |
jboettcher | 5:c73ebb00e86d | 223 | if (tempF < target_temp - 1) |
jboettcher | 5:c73ebb00e86d | 224 | { |
jboettcher | 5:c73ebb00e86d | 225 | if (Prior_temp > target_temp - 1) |
jboettcher | 5:c73ebb00e86d | 226 | { |
jboettcher | 5:c73ebb00e86d | 227 | mySpeaker.PlayNote(1000.0, 0.025, 1.0); |
jboettcher | 5:c73ebb00e86d | 228 | } |
jboettcher | 5:c73ebb00e86d | 229 | greenpin = 0; |
jboettcher | 5:c73ebb00e86d | 230 | redpin = 0; |
jboettcher | 5:c73ebb00e86d | 231 | bluepin = 0; |
jboettcher | 5:c73ebb00e86d | 232 | state = Cool_off; |
jboettcher | 5:c73ebb00e86d | 233 | } |
jboettcher | 5:c73ebb00e86d | 234 | } |
jboettcher | 5:c73ebb00e86d | 235 | uLCD.locate(3,5); |
jboettcher | 5:c73ebb00e86d | 236 | if (mode == 1) { |
jboettcher | 5:c73ebb00e86d | 237 | uLCD.color(RED); |
jboettcher | 5:c73ebb00e86d | 238 | uLCD.printf("Heat to: %2d", target_temp); |
jboettcher | 5:c73ebb00e86d | 239 | uLCD.color(GREEN); |
jboettcher | 5:c73ebb00e86d | 240 | myLED1 = 1; |
jboettcher | 5:c73ebb00e86d | 241 | myLED2 = 0; } |
jboettcher | 5:c73ebb00e86d | 242 | if (mode == 2) { |
jboettcher | 5:c73ebb00e86d | 243 | uLCD.color(LBLUE); |
jboettcher | 5:c73ebb00e86d | 244 | uLCD.printf("Cool to: %2d", target_temp); |
jboettcher | 5:c73ebb00e86d | 245 | uLCD.color(GREEN); |
jboettcher | 5:c73ebb00e86d | 246 | myLED1 = 0; |
jboettcher | 5:c73ebb00e86d | 247 | myLED2 = 1; } |
jboettcher | 5:c73ebb00e86d | 248 | if (mode == 0) { |
jboettcher | 5:c73ebb00e86d | 249 | uLCD.printf(" ", target_temp); |
jboettcher | 5:c73ebb00e86d | 250 | myLED1 = 0; |
jboettcher | 5:c73ebb00e86d | 251 | myLED2 = 0; } |
jboettcher | 5:c73ebb00e86d | 252 | |
4180_1 | 2:58d85409f7ff | 253 | switch (state) { |
4180_1 | 2:58d85409f7ff | 254 | case Heat_off: |
jboettcher | 5:c73ebb00e86d | 255 | myLED3 = 0; |
4180_1 | 3:346ef671ef28 | 256 | myLED4 = 0; |
jboettcher | 5:c73ebb00e86d | 257 | //state = Heat_on; |
jboettcher | 5:c73ebb00e86d | 258 | uLCD.locate(3,4); |
jboettcher | 5:c73ebb00e86d | 259 | uLCD.printf("Heat Off"); |
4180_1 | 2:58d85409f7ff | 260 | break; |
4180_1 | 2:58d85409f7ff | 261 | case Heat_on: |
jboettcher | 5:c73ebb00e86d | 262 | myLED3 = 0; |
4180_1 | 3:346ef671ef28 | 263 | myLED4 = 1; |
jboettcher | 5:c73ebb00e86d | 264 | //state = Heat_off; |
jboettcher | 5:c73ebb00e86d | 265 | uLCD.locate(3,4); |
jboettcher | 5:c73ebb00e86d | 266 | uLCD.color(RED); |
jboettcher | 5:c73ebb00e86d | 267 | uLCD.printf("Heat On "); |
jboettcher | 5:c73ebb00e86d | 268 | uLCD.color(GREEN); |
jboettcher | 5:c73ebb00e86d | 269 | break; |
jboettcher | 5:c73ebb00e86d | 270 | case Cool_off: |
jboettcher | 5:c73ebb00e86d | 271 | myLED3 = 0; |
jboettcher | 5:c73ebb00e86d | 272 | myLED4 = 0; |
jboettcher | 5:c73ebb00e86d | 273 | //state = Cool_on; |
jboettcher | 5:c73ebb00e86d | 274 | uLCD.locate(3,4); |
jboettcher | 5:c73ebb00e86d | 275 | uLCD.printf("Cool Off"); |
jboettcher | 5:c73ebb00e86d | 276 | break; |
jboettcher | 5:c73ebb00e86d | 277 | case Cool_on: |
jboettcher | 5:c73ebb00e86d | 278 | myLED3 = 1; |
jboettcher | 5:c73ebb00e86d | 279 | myLED4 = 0; |
jboettcher | 5:c73ebb00e86d | 280 | //state = Cool_off; |
jboettcher | 5:c73ebb00e86d | 281 | uLCD.locate(3,4); |
jboettcher | 5:c73ebb00e86d | 282 | uLCD.color(LBLUE); |
jboettcher | 5:c73ebb00e86d | 283 | uLCD.printf("Cool On "); |
jboettcher | 5:c73ebb00e86d | 284 | uLCD.color(GREEN); |
jboettcher | 5:c73ebb00e86d | 285 | break; |
jboettcher | 5:c73ebb00e86d | 286 | case Off: |
jboettcher | 5:c73ebb00e86d | 287 | myLED4 = 0; |
jboettcher | 5:c73ebb00e86d | 288 | uLCD.locate(3,4); |
jboettcher | 5:c73ebb00e86d | 289 | uLCD.printf(" "); |
4180_1 | 2:58d85409f7ff | 290 | break; |
4180_1 | 2:58d85409f7ff | 291 | } |
jboettcher | 5:c73ebb00e86d | 292 | |
4180_1 | 2:58d85409f7ff | 293 | wait(0.33); |
4180_1 | 2:58d85409f7ff | 294 | } |
4180_1 | 0:cc87c48aa43c | 295 | } |
4180_1 | 0:cc87c48aa43c | 296 | } |