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