Working version with debug and simulate mode
Dependencies: mbed Grove_LCD_RGB_Backlight DebounceIn
main.cpp@1:6d456a72fe63, 2019-09-19 (annotated)
- Committer:
- bmcclure
- Date:
- Thu Sep 19 22:35:30 2019 +0000
- Revision:
- 1:6d456a72fe63
- Parent:
- 0:2f5d939d4a4a
Working version with debug mode and simulate mode.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dattranvnfrr | 0:2f5d939d4a4a | 1 | #include "Grove_LCD_RGB_Backlight.h" |
dattranvnfrr | 0:2f5d939d4a4a | 2 | #include "mbed.h" |
dattranvnfrr | 0:2f5d939d4a4a | 3 | #include "DebounceIn.h" |
dattranvnfrr | 0:2f5d939d4a4a | 4 | |
bmcclure | 1:6d456a72fe63 | 5 | |
bmcclure | 1:6d456a72fe63 | 6 | #define OUT_OFF (0) |
bmcclure | 1:6d456a72fe63 | 7 | #define OUT_ON (1) |
bmcclure | 1:6d456a72fe63 | 8 | |
bmcclure | 1:6d456a72fe63 | 9 | #define IN_OFF (1) |
bmcclure | 1:6d456a72fe63 | 10 | #define IN_ON (0) |
dattranvnfrr | 0:2f5d939d4a4a | 11 | |
bmcclure | 1:6d456a72fe63 | 12 | |
bmcclure | 1:6d456a72fe63 | 13 | //input |
bmcclure | 1:6d456a72fe63 | 14 | DebounceIn doorClosed(p5); //Check door status |
dattranvnfrr | 0:2f5d939d4a4a | 15 | DebounceIn cycleStartBtt(p14); //cycle start button |
bmcclure | 1:6d456a72fe63 | 16 | DebounceIn stopBtt(p15); //stop button |
bmcclure | 1:6d456a72fe63 | 17 | //InterruptIn stopBtt(p15); //stop button |
dattranvnfrr | 0:2f5d939d4a4a | 18 | //DigitalIn pot(p20); |
dattranvnfrr | 0:2f5d939d4a4a | 19 | |
dattranvnfrr | 0:2f5d939d4a4a | 20 | //output |
dattranvnfrr | 0:2f5d939d4a4a | 21 | DigitalOut doorInterlock(p6); //Door interlock |
dattranvnfrr | 0:2f5d939d4a4a | 22 | DigitalOut fanRelay(p7); //Fan control |
dattranvnfrr | 0:2f5d939d4a4a | 23 | DigitalOut redRelay(p8); //Red light |
dattranvnfrr | 0:2f5d939d4a4a | 24 | DigitalOut yellowRelay(p11); //Yellow light |
dattranvnfrr | 0:2f5d939d4a4a | 25 | DigitalOut greenRelay(p12); //Green light |
dattranvnfrr | 0:2f5d939d4a4a | 26 | DigitalOut damperRelay(p13); //Damper solenoid control |
dattranvnfrr | 0:2f5d939d4a4a | 27 | DigitalOut damperRelayAlt(p16); //Damper solenoid toggle control |
dattranvnfrr | 0:2f5d939d4a4a | 28 | DigitalOut vfd(p17); //VFD Start relay |
dattranvnfrr | 0:2f5d939d4a4a | 29 | |
dattranvnfrr | 0:2f5d939d4a4a | 30 | Grove_LCD_RGB_Backlight rgbLCD(p9, p10); //Timer display |
dattranvnfrr | 0:2f5d939d4a4a | 31 | |
bmcclure | 1:6d456a72fe63 | 32 | bool cancelPending = false; |
bmcclure | 1:6d456a72fe63 | 33 | bool damperIsOpen; |
bmcclure | 1:6d456a72fe63 | 34 | bool simulateMode = false; |
dattranvnfrr | 0:2f5d939d4a4a | 35 | |
dattranvnfrr | 0:2f5d939d4a4a | 36 | I2C i2c(p9, p10); |
dattranvnfrr | 0:2f5d939d4a4a | 37 | //Serial pc(USBTX, USBRX); |
dattranvnfrr | 0:2f5d939d4a4a | 38 | |
bmcclure | 1:6d456a72fe63 | 39 | |
dattranvnfrr | 0:2f5d939d4a4a | 40 | //extern "C" void mbed_reset(); |
dattranvnfrr | 0:2f5d939d4a4a | 41 | |
bmcclure | 1:6d456a72fe63 | 42 | // Function declarations |
bmcclure | 1:6d456a72fe63 | 43 | void damperRotate(int damper); |
bmcclure | 1:6d456a72fe63 | 44 | void fullLineItoA(int m, char* str); |
bmcclure | 1:6d456a72fe63 | 45 | void countDown(int s); //countdown in sec |
bmcclure | 1:6d456a72fe63 | 46 | void fullStop(); |
bmcclure | 1:6d456a72fe63 | 47 | void debugMode(); |
bmcclure | 1:6d456a72fe63 | 48 | |
bmcclure | 1:6d456a72fe63 | 49 | |
bmcclure | 1:6d456a72fe63 | 50 | |
bmcclure | 1:6d456a72fe63 | 51 | int main() |
bmcclure | 1:6d456a72fe63 | 52 | { |
bmcclure | 1:6d456a72fe63 | 53 | //on power up status |
bmcclure | 1:6d456a72fe63 | 54 | cycleStartBtt.mode(PullUp); |
bmcclure | 1:6d456a72fe63 | 55 | cycleStartBtt.set_debounce_us(1000); |
bmcclure | 1:6d456a72fe63 | 56 | cycleStartBtt.set_samples(100); |
bmcclure | 1:6d456a72fe63 | 57 | wait(.1); |
bmcclure | 1:6d456a72fe63 | 58 | |
bmcclure | 1:6d456a72fe63 | 59 | doorClosed.mode(PullUp); |
bmcclure | 1:6d456a72fe63 | 60 | cycleStartBtt.set_debounce_us(1000); |
bmcclure | 1:6d456a72fe63 | 61 | cycleStartBtt.set_samples(100); |
bmcclure | 1:6d456a72fe63 | 62 | wait(.1); |
bmcclure | 1:6d456a72fe63 | 63 | |
bmcclure | 1:6d456a72fe63 | 64 | stopBtt.mode(PullUp); |
bmcclure | 1:6d456a72fe63 | 65 | cycleStartBtt.set_debounce_us(1000); |
bmcclure | 1:6d456a72fe63 | 66 | cycleStartBtt.set_samples(100); |
bmcclure | 1:6d456a72fe63 | 67 | wait(.5); |
bmcclure | 1:6d456a72fe63 | 68 | |
bmcclure | 1:6d456a72fe63 | 69 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 70 | rgbLCD.setRGB(0x00, 0x66, 0xaa); //set the color |
bmcclure | 1:6d456a72fe63 | 71 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 72 | |
bmcclure | 1:6d456a72fe63 | 73 | if(cycleStartBtt == IN_ON && stopBtt == IN_ON) |
bmcclure | 1:6d456a72fe63 | 74 | { |
bmcclure | 1:6d456a72fe63 | 75 | simulateMode = true; |
bmcclure | 1:6d456a72fe63 | 76 | rgbLCD.print("Simulating.... "); |
bmcclure | 1:6d456a72fe63 | 77 | wait(5); |
bmcclure | 1:6d456a72fe63 | 78 | } |
bmcclure | 1:6d456a72fe63 | 79 | if(stopBtt == IN_ON) |
bmcclure | 1:6d456a72fe63 | 80 | { |
bmcclure | 1:6d456a72fe63 | 81 | debugMode(); |
bmcclure | 1:6d456a72fe63 | 82 | } |
bmcclure | 1:6d456a72fe63 | 83 | |
bmcclure | 1:6d456a72fe63 | 84 | //check for closed door before running fan |
bmcclure | 1:6d456a72fe63 | 85 | while(doorClosed!=IN_ON) |
bmcclure | 1:6d456a72fe63 | 86 | { |
bmcclure | 1:6d456a72fe63 | 87 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 88 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 89 | rgbLCD.print("Close the door "); |
bmcclure | 1:6d456a72fe63 | 90 | wait(.25); |
bmcclure | 1:6d456a72fe63 | 91 | } |
bmcclure | 1:6d456a72fe63 | 92 | |
bmcclure | 1:6d456a72fe63 | 93 | //Display startup countdown |
bmcclure | 1:6d456a72fe63 | 94 | //Startin up and prep the tank |
bmcclure | 1:6d456a72fe63 | 95 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 96 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 97 | rgbLCD.print("Starting up... "); |
bmcclure | 1:6d456a72fe63 | 98 | |
bmcclure | 1:6d456a72fe63 | 99 | vfd = OUT_OFF; |
bmcclure | 1:6d456a72fe63 | 100 | damperIsOpen = false; // Assert and run the opener once |
bmcclure | 1:6d456a72fe63 | 101 | damperRotate(1); //vent opened; |
bmcclure | 1:6d456a72fe63 | 102 | if(!simulateMode) |
bmcclure | 1:6d456a72fe63 | 103 | { |
bmcclure | 1:6d456a72fe63 | 104 | doorInterlock = OUT_ON; |
bmcclure | 1:6d456a72fe63 | 105 | fanRelay = OUT_ON; |
bmcclure | 1:6d456a72fe63 | 106 | } |
bmcclure | 1:6d456a72fe63 | 107 | greenRelay = OUT_OFF; |
bmcclure | 1:6d456a72fe63 | 108 | yellowRelay = OUT_OFF; |
bmcclure | 1:6d456a72fe63 | 109 | redRelay = OUT_OFF; |
bmcclure | 1:6d456a72fe63 | 110 | |
bmcclure | 1:6d456a72fe63 | 111 | //start timer for 90sec |
bmcclure | 1:6d456a72fe63 | 112 | countDown(90); |
bmcclure | 1:6d456a72fe63 | 113 | |
bmcclure | 1:6d456a72fe63 | 114 | //Tank is ready |
bmcclure | 1:6d456a72fe63 | 115 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 116 | rgbLCD.print("Tank is ready! "); |
bmcclure | 1:6d456a72fe63 | 117 | greenRelay = OUT_ON; //green light on |
bmcclure | 1:6d456a72fe63 | 118 | doorInterlock = OUT_OFF; //interlock unlatched, ready to load material into the tank |
bmcclure | 1:6d456a72fe63 | 119 | fanRelay = OUT_OFF; //fan off |
bmcclure | 1:6d456a72fe63 | 120 | |
bmcclure | 1:6d456a72fe63 | 121 | cancelPending = false; |
bmcclure | 1:6d456a72fe63 | 122 | |
bmcclure | 1:6d456a72fe63 | 123 | while(1) |
bmcclure | 1:6d456a72fe63 | 124 | { |
bmcclure | 1:6d456a72fe63 | 125 | if(cancelPending) |
bmcclure | 1:6d456a72fe63 | 126 | { |
bmcclure | 1:6d456a72fe63 | 127 | cancelPending = false; |
bmcclure | 1:6d456a72fe63 | 128 | |
bmcclure | 1:6d456a72fe63 | 129 | //Display status |
bmcclure | 1:6d456a72fe63 | 130 | greenRelay = OUT_OFF; //green light OFF |
bmcclure | 1:6d456a72fe63 | 131 | yellowRelay = OUT_OFF; //yellow light OFF |
bmcclure | 1:6d456a72fe63 | 132 | redRelay = OUT_ON; //turn red light ON |
bmcclure | 1:6d456a72fe63 | 133 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 134 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 135 | rgbLCD.print("CYCLE STOPPED. "); |
bmcclure | 1:6d456a72fe63 | 136 | vfd = OUT_OFF; //pump off |
bmcclure | 1:6d456a72fe63 | 137 | if(doorClosed == IN_ON && !simulateMode) |
bmcclure | 1:6d456a72fe63 | 138 | { |
bmcclure | 1:6d456a72fe63 | 139 | doorInterlock = OUT_ON; //door latched |
bmcclure | 1:6d456a72fe63 | 140 | } |
bmcclure | 1:6d456a72fe63 | 141 | fanRelay = OUT_OFF; //fan stops |
bmcclure | 1:6d456a72fe63 | 142 | damperRotate(0); //damper closed |
bmcclure | 1:6d456a72fe63 | 143 | |
bmcclure | 1:6d456a72fe63 | 144 | //wait 60sec |
bmcclure | 1:6d456a72fe63 | 145 | countDown(60); |
bmcclure | 1:6d456a72fe63 | 146 | doorInterlock=OUT_OFF; //door unlatched |
bmcclure | 1:6d456a72fe63 | 147 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 148 | rgbLCD.print("Tank is ready! "); |
bmcclure | 1:6d456a72fe63 | 149 | } |
bmcclure | 1:6d456a72fe63 | 150 | |
bmcclure | 1:6d456a72fe63 | 151 | if(doorClosed==IN_ON) //door closed |
bmcclure | 1:6d456a72fe63 | 152 | { |
bmcclure | 1:6d456a72fe63 | 153 | /* |
bmcclure | 1:6d456a72fe63 | 154 | * Get set up for the wash, and wait for the start button |
bmcclure | 1:6d456a72fe63 | 155 | */ |
bmcclure | 1:6d456a72fe63 | 156 | rgbLCD.locate(0,1); |
bmcclure | 1:6d456a72fe63 | 157 | rgbLCD.print("Door closed "); |
bmcclure | 1:6d456a72fe63 | 158 | greenRelay = OUT_ON; //green light stays on |
bmcclure | 1:6d456a72fe63 | 159 | yellowRelay = OUT_OFF; //yellow light off |
bmcclure | 1:6d456a72fe63 | 160 | redRelay = OUT_OFF; //red light off |
bmcclure | 1:6d456a72fe63 | 161 | doorInterlock = OUT_OFF; //door unlocked |
bmcclure | 1:6d456a72fe63 | 162 | fanRelay = OUT_OFF; |
bmcclure | 1:6d456a72fe63 | 163 | while(cycleStartBtt != IN_ON && !(doorClosed == IN_OFF || cancelPending)) |
bmcclure | 1:6d456a72fe63 | 164 | { |
bmcclure | 1:6d456a72fe63 | 165 | if(stopBtt == IN_ON) |
bmcclure | 1:6d456a72fe63 | 166 | { |
bmcclure | 1:6d456a72fe63 | 167 | cancelPending = true; |
bmcclure | 1:6d456a72fe63 | 168 | continue; |
bmcclure | 1:6d456a72fe63 | 169 | } |
bmcclure | 1:6d456a72fe63 | 170 | wait(.25); |
bmcclure | 1:6d456a72fe63 | 171 | } |
bmcclure | 1:6d456a72fe63 | 172 | if(doorClosed == IN_OFF || cancelPending) |
bmcclure | 1:6d456a72fe63 | 173 | { |
bmcclure | 1:6d456a72fe63 | 174 | continue; |
bmcclure | 1:6d456a72fe63 | 175 | } |
bmcclure | 1:6d456a72fe63 | 176 | |
bmcclure | 1:6d456a72fe63 | 177 | |
bmcclure | 1:6d456a72fe63 | 178 | /* |
bmcclure | 1:6d456a72fe63 | 179 | * Cycle start button pressed - wash for 2 minutes |
bmcclure | 1:6d456a72fe63 | 180 | */ |
bmcclure | 1:6d456a72fe63 | 181 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 182 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 183 | rgbLCD.print("CYCLE STARTED! "); |
bmcclure | 1:6d456a72fe63 | 184 | greenRelay = OUT_OFF; //green light off |
bmcclure | 1:6d456a72fe63 | 185 | yellowRelay = OUT_ON; //yellow light on |
bmcclure | 1:6d456a72fe63 | 186 | damperRotate(0); //vent close |
bmcclure | 1:6d456a72fe63 | 187 | fanRelay = OUT_OFF; //fan stop |
bmcclure | 1:6d456a72fe63 | 188 | if(!simulateMode) |
bmcclure | 1:6d456a72fe63 | 189 | { |
bmcclure | 1:6d456a72fe63 | 190 | doorInterlock = OUT_ON; //door locked |
bmcclure | 1:6d456a72fe63 | 191 | vfd = OUT_ON; //vfd for pump up to speed |
bmcclure | 1:6d456a72fe63 | 192 | } |
bmcclure | 1:6d456a72fe63 | 193 | countDown(120); //start timer for 2min |
bmcclure | 1:6d456a72fe63 | 194 | if(doorClosed == IN_OFF || cancelPending) |
bmcclure | 1:6d456a72fe63 | 195 | { |
bmcclure | 1:6d456a72fe63 | 196 | continue; |
bmcclure | 1:6d456a72fe63 | 197 | } |
bmcclure | 1:6d456a72fe63 | 198 | |
bmcclure | 1:6d456a72fe63 | 199 | |
bmcclure | 1:6d456a72fe63 | 200 | /* |
bmcclure | 1:6d456a72fe63 | 201 | * Finished washing - turn off the pump |
bmcclure | 1:6d456a72fe63 | 202 | */ |
bmcclure | 1:6d456a72fe63 | 203 | vfd = OUT_OFF; //pump off |
bmcclure | 1:6d456a72fe63 | 204 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 205 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 206 | rgbLCD.print("CYCLE FINISHED! "); |
bmcclure | 1:6d456a72fe63 | 207 | wait(1); |
bmcclure | 1:6d456a72fe63 | 208 | if(doorClosed == IN_OFF || cancelPending) |
bmcclure | 1:6d456a72fe63 | 209 | { |
bmcclure | 1:6d456a72fe63 | 210 | continue; |
bmcclure | 1:6d456a72fe63 | 211 | } |
bmcclure | 1:6d456a72fe63 | 212 | |
bmcclure | 1:6d456a72fe63 | 213 | |
bmcclure | 1:6d456a72fe63 | 214 | /* |
bmcclure | 1:6d456a72fe63 | 215 | * Drip dry after washing for 5 minutes |
bmcclure | 1:6d456a72fe63 | 216 | */ |
bmcclure | 1:6d456a72fe63 | 217 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 218 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 219 | rgbLCD.print("DRIP DRYING! "); |
bmcclure | 1:6d456a72fe63 | 220 | countDown(300); |
bmcclure | 1:6d456a72fe63 | 221 | if(doorClosed == IN_OFF || cancelPending) |
bmcclure | 1:6d456a72fe63 | 222 | { |
bmcclure | 1:6d456a72fe63 | 223 | continue; |
bmcclure | 1:6d456a72fe63 | 224 | } |
bmcclure | 1:6d456a72fe63 | 225 | |
bmcclure | 1:6d456a72fe63 | 226 | |
bmcclure | 1:6d456a72fe63 | 227 | /* |
bmcclure | 1:6d456a72fe63 | 228 | * Change the air out for 2 minutes |
bmcclure | 1:6d456a72fe63 | 229 | */ |
bmcclure | 1:6d456a72fe63 | 230 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 231 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 232 | rgbLCD.print("AIR CYCLING! "); |
bmcclure | 1:6d456a72fe63 | 233 | damperRotate(1); //vent opened |
bmcclure | 1:6d456a72fe63 | 234 | if(!simulateMode) |
bmcclure | 1:6d456a72fe63 | 235 | { |
bmcclure | 1:6d456a72fe63 | 236 | fanRelay = OUT_ON; //fan on |
bmcclure | 1:6d456a72fe63 | 237 | } |
bmcclure | 1:6d456a72fe63 | 238 | countDown(120); |
bmcclure | 1:6d456a72fe63 | 239 | if(doorClosed == IN_OFF || cancelPending) |
bmcclure | 1:6d456a72fe63 | 240 | { |
bmcclure | 1:6d456a72fe63 | 241 | continue; |
bmcclure | 1:6d456a72fe63 | 242 | } |
bmcclure | 1:6d456a72fe63 | 243 | |
bmcclure | 1:6d456a72fe63 | 244 | |
bmcclure | 1:6d456a72fe63 | 245 | /* |
bmcclure | 1:6d456a72fe63 | 246 | * Entire cycle is done, close up and go back to waiting |
bmcclure | 1:6d456a72fe63 | 247 | */ |
bmcclure | 1:6d456a72fe63 | 248 | greenRelay = OUT_ON; //green light on |
bmcclure | 1:6d456a72fe63 | 249 | yellowRelay = OUT_OFF; //yellow light off |
bmcclure | 1:6d456a72fe63 | 250 | doorInterlock = OUT_OFF; //door unlocked |
bmcclure | 1:6d456a72fe63 | 251 | fanRelay = OUT_OFF; //fan off |
bmcclure | 1:6d456a72fe63 | 252 | damperRotate(0); //damperRelay=0; //vent closed |
bmcclure | 1:6d456a72fe63 | 253 | rgbLCD.clear(); |
bmcclure | 1:6d456a72fe63 | 254 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 255 | rgbLCD.print("Tank is ready! "); |
bmcclure | 1:6d456a72fe63 | 256 | } |
bmcclure | 1:6d456a72fe63 | 257 | else //door open |
bmcclure | 1:6d456a72fe63 | 258 | { |
bmcclure | 1:6d456a72fe63 | 259 | rgbLCD.locate(0,1); |
bmcclure | 1:6d456a72fe63 | 260 | rgbLCD.print("Door open "); |
bmcclure | 1:6d456a72fe63 | 261 | greenRelay = OUT_OFF; //green light OFF |
bmcclure | 1:6d456a72fe63 | 262 | redRelay = OUT_ON; //turn red light ON |
bmcclure | 1:6d456a72fe63 | 263 | yellowRelay = OUT_OFF; |
bmcclure | 1:6d456a72fe63 | 264 | fanRelay = OUT_OFF; //fan stops |
bmcclure | 1:6d456a72fe63 | 265 | damperRotate(1); //damperRelay=1; //damper closed |
bmcclure | 1:6d456a72fe63 | 266 | } |
bmcclure | 1:6d456a72fe63 | 267 | |
bmcclure | 1:6d456a72fe63 | 268 | wait(1); |
bmcclure | 1:6d456a72fe63 | 269 | } |
bmcclure | 1:6d456a72fe63 | 270 | } |
bmcclure | 1:6d456a72fe63 | 271 | |
bmcclure | 1:6d456a72fe63 | 272 | |
bmcclure | 1:6d456a72fe63 | 273 | |
bmcclure | 1:6d456a72fe63 | 274 | |
dattranvnfrr | 0:2f5d939d4a4a | 275 | void damperRotate(int damper) //damper condition |
dattranvnfrr | 0:2f5d939d4a4a | 276 | { |
bmcclure | 1:6d456a72fe63 | 277 | if(damper==0 && damperIsOpen == true && !simulateMode) |
dattranvnfrr | 0:2f5d939d4a4a | 278 | { |
bmcclure | 1:6d456a72fe63 | 279 | damperRelayAlt=OUT_ON; //toggle damper relay |
bmcclure | 1:6d456a72fe63 | 280 | rgbLCD.locate(0,1); |
bmcclure | 1:6d456a72fe63 | 281 | rgbLCD.print("Closing damper "); |
dattranvnfrr | 0:2f5d939d4a4a | 282 | wait(5); |
bmcclure | 1:6d456a72fe63 | 283 | damperRelayAlt=OUT_OFF; //time out to reduce wear |
bmcclure | 1:6d456a72fe63 | 284 | damperIsOpen = false; |
bmcclure | 1:6d456a72fe63 | 285 | } |
bmcclure | 1:6d456a72fe63 | 286 | else if(damper == 1 && damperIsOpen == false && !simulateMode) |
bmcclure | 1:6d456a72fe63 | 287 | { |
bmcclure | 1:6d456a72fe63 | 288 | damperRelay=OUT_ON; //toggle damper relay |
bmcclure | 1:6d456a72fe63 | 289 | rgbLCD.locate(0,1); |
bmcclure | 1:6d456a72fe63 | 290 | rgbLCD.print("Opening damper "); |
bmcclure | 1:6d456a72fe63 | 291 | wait(5); |
bmcclure | 1:6d456a72fe63 | 292 | damperRelay=OUT_OFF; //time out to reduce wear |
bmcclure | 1:6d456a72fe63 | 293 | damperIsOpen = true; |
dattranvnfrr | 0:2f5d939d4a4a | 294 | } |
bmcclure | 1:6d456a72fe63 | 295 | } |
bmcclure | 1:6d456a72fe63 | 296 | |
bmcclure | 1:6d456a72fe63 | 297 | void fullLineItoA(int m, char* str) |
bmcclure | 1:6d456a72fe63 | 298 | { |
bmcclure | 1:6d456a72fe63 | 299 | if(str == NULL) |
bmcclure | 1:6d456a72fe63 | 300 | { |
bmcclure | 1:6d456a72fe63 | 301 | return; |
bmcclure | 1:6d456a72fe63 | 302 | } |
bmcclure | 1:6d456a72fe63 | 303 | |
bmcclure | 1:6d456a72fe63 | 304 | // Empty the array to 16 white spaces |
bmcclure | 1:6d456a72fe63 | 305 | for(int j=0; j < 16; j++) |
dattranvnfrr | 0:2f5d939d4a4a | 306 | { |
bmcclure | 1:6d456a72fe63 | 307 | str[j] = ' '; |
dattranvnfrr | 0:2f5d939d4a4a | 308 | } |
bmcclure | 1:6d456a72fe63 | 309 | str[16] = 0; |
bmcclure | 1:6d456a72fe63 | 310 | |
bmcclure | 1:6d456a72fe63 | 311 | // Put our counter in it, with the least-significant digit in col 4. |
bmcclure | 1:6d456a72fe63 | 312 | int i = 3; |
bmcclure | 1:6d456a72fe63 | 313 | do |
bmcclure | 1:6d456a72fe63 | 314 | { |
bmcclure | 1:6d456a72fe63 | 315 | str[i] = m%10 + '0'; |
bmcclure | 1:6d456a72fe63 | 316 | m /= 10; |
bmcclure | 1:6d456a72fe63 | 317 | i--; |
bmcclure | 1:6d456a72fe63 | 318 | }while(m > 0 && i >= 0); |
dattranvnfrr | 0:2f5d939d4a4a | 319 | } |
dattranvnfrr | 0:2f5d939d4a4a | 320 | |
dattranvnfrr | 0:2f5d939d4a4a | 321 | void countDown(int s) //countdown in sec |
dattranvnfrr | 0:2f5d939d4a4a | 322 | { |
bmcclure | 1:6d456a72fe63 | 323 | int m=0; |
bmcclure | 1:6d456a72fe63 | 324 | char count[12]; // make a 'count' string |
bmcclure | 1:6d456a72fe63 | 325 | |
bmcclure | 1:6d456a72fe63 | 326 | for(m=s; m>0; m--) |
bmcclure | 1:6d456a72fe63 | 327 | { |
bmcclure | 1:6d456a72fe63 | 328 | if(stopBtt == IN_ON) |
bmcclure | 1:6d456a72fe63 | 329 | { |
bmcclure | 1:6d456a72fe63 | 330 | cancelPending = true; |
bmcclure | 1:6d456a72fe63 | 331 | break; |
bmcclure | 1:6d456a72fe63 | 332 | } |
bmcclure | 1:6d456a72fe63 | 333 | |
bmcclure | 1:6d456a72fe63 | 334 | fullLineItoA(m, count); |
bmcclure | 1:6d456a72fe63 | 335 | |
bmcclure | 1:6d456a72fe63 | 336 | rgbLCD.locate(0,1); |
bmcclure | 1:6d456a72fe63 | 337 | rgbLCD.print(count); |
bmcclure | 1:6d456a72fe63 | 338 | |
bmcclure | 1:6d456a72fe63 | 339 | wait(1); |
dattranvnfrr | 0:2f5d939d4a4a | 340 | } |
dattranvnfrr | 0:2f5d939d4a4a | 341 | } |
dattranvnfrr | 0:2f5d939d4a4a | 342 | |
bmcclure | 1:6d456a72fe63 | 343 | |
bmcclure | 1:6d456a72fe63 | 344 | void debugMode() |
dattranvnfrr | 0:2f5d939d4a4a | 345 | { |
bmcclure | 1:6d456a72fe63 | 346 | char displayLine1[17]; |
bmcclure | 1:6d456a72fe63 | 347 | char displayLine2[17]; |
bmcclure | 1:6d456a72fe63 | 348 | unsigned int count = 0; |
bmcclure | 1:6d456a72fe63 | 349 | |
dattranvnfrr | 0:2f5d939d4a4a | 350 | rgbLCD.clear(); |
dattranvnfrr | 0:2f5d939d4a4a | 351 | rgbLCD.locate(0,0); |
dattranvnfrr | 0:2f5d939d4a4a | 352 | |
bmcclure | 1:6d456a72fe63 | 353 | do |
bmcclure | 1:6d456a72fe63 | 354 | { |
bmcclure | 1:6d456a72fe63 | 355 | strcpy(displayLine1, "Door= "); |
bmcclure | 1:6d456a72fe63 | 356 | if(doorClosed == 1) |
bmcclure | 1:6d456a72fe63 | 357 | { |
bmcclure | 1:6d456a72fe63 | 358 | strcat(displayLine1, "1"); |
bmcclure | 1:6d456a72fe63 | 359 | } |
bmcclure | 1:6d456a72fe63 | 360 | else |
bmcclure | 1:6d456a72fe63 | 361 | { |
bmcclure | 1:6d456a72fe63 | 362 | strcat(displayLine1, "0"); |
bmcclure | 1:6d456a72fe63 | 363 | } |
dattranvnfrr | 0:2f5d939d4a4a | 364 | |
bmcclure | 1:6d456a72fe63 | 365 | strcat(displayLine1, ",Start="); |
bmcclure | 1:6d456a72fe63 | 366 | if(cycleStartBtt == 1) |
bmcclure | 1:6d456a72fe63 | 367 | { |
bmcclure | 1:6d456a72fe63 | 368 | strcat(displayLine1, "1 "); |
bmcclure | 1:6d456a72fe63 | 369 | } |
bmcclure | 1:6d456a72fe63 | 370 | else |
bmcclure | 1:6d456a72fe63 | 371 | { |
bmcclure | 1:6d456a72fe63 | 372 | strcat(displayLine1, "0 "); |
bmcclure | 1:6d456a72fe63 | 373 | } |
dattranvnfrr | 0:2f5d939d4a4a | 374 | |
bmcclure | 1:6d456a72fe63 | 375 | |
bmcclure | 1:6d456a72fe63 | 376 | strcpy(displayLine2, "Stop= "); |
bmcclure | 1:6d456a72fe63 | 377 | if(stopBtt == 1) |
bmcclure | 1:6d456a72fe63 | 378 | { |
bmcclure | 1:6d456a72fe63 | 379 | strcat(displayLine2, "1 "); |
bmcclure | 1:6d456a72fe63 | 380 | } |
bmcclure | 1:6d456a72fe63 | 381 | else |
dattranvnfrr | 0:2f5d939d4a4a | 382 | { |
bmcclure | 1:6d456a72fe63 | 383 | strcat(displayLine2, "0 "); |
bmcclure | 1:6d456a72fe63 | 384 | } |
bmcclure | 1:6d456a72fe63 | 385 | |
bmcclure | 1:6d456a72fe63 | 386 | // Every 2s, change the outputs |
bmcclure | 1:6d456a72fe63 | 387 | if((count&7) == 0) |
bmcclure | 1:6d456a72fe63 | 388 | { |
bmcclure | 1:6d456a72fe63 | 389 | doorInterlock = OUT_OFF; //Door interlock |
bmcclure | 1:6d456a72fe63 | 390 | fanRelay = OUT_OFF; //Fan control |
bmcclure | 1:6d456a72fe63 | 391 | redRelay = OUT_OFF; //Red light |
bmcclure | 1:6d456a72fe63 | 392 | yellowRelay = OUT_OFF; //Yellow light |
bmcclure | 1:6d456a72fe63 | 393 | greenRelay = OUT_OFF; //Green light |
bmcclure | 1:6d456a72fe63 | 394 | damperRelay = OUT_OFF; //Damper solenoid control |
bmcclure | 1:6d456a72fe63 | 395 | damperRelayAlt = OUT_OFF; //Damper solenoid toggle control |
bmcclure | 1:6d456a72fe63 | 396 | vfd = OUT_OFF; //VFD Start relay |
dattranvnfrr | 0:2f5d939d4a4a | 397 | |
bmcclure | 1:6d456a72fe63 | 398 | switch((count>>3)%8) |
dattranvnfrr | 0:2f5d939d4a4a | 399 | { |
bmcclure | 1:6d456a72fe63 | 400 | case 0: |
bmcclure | 1:6d456a72fe63 | 401 | doorInterlock = OUT_ON; //Door interlock |
bmcclure | 1:6d456a72fe63 | 402 | strcat(displayLine2, " Lock "); |
bmcclure | 1:6d456a72fe63 | 403 | break; |
bmcclure | 1:6d456a72fe63 | 404 | case 1: |
bmcclure | 1:6d456a72fe63 | 405 | fanRelay = OUT_ON; //Fan control |
bmcclure | 1:6d456a72fe63 | 406 | strcat(displayLine2, " Fan "); |
bmcclure | 1:6d456a72fe63 | 407 | break; |
bmcclure | 1:6d456a72fe63 | 408 | case 2: |
bmcclure | 1:6d456a72fe63 | 409 | redRelay = OUT_ON; //Red light |
bmcclure | 1:6d456a72fe63 | 410 | strcat(displayLine2, " Red "); |
bmcclure | 1:6d456a72fe63 | 411 | break; |
bmcclure | 1:6d456a72fe63 | 412 | case 3: |
bmcclure | 1:6d456a72fe63 | 413 | yellowRelay = OUT_ON; //Yellow light |
bmcclure | 1:6d456a72fe63 | 414 | strcat(displayLine2, " Yellow "); |
bmcclure | 1:6d456a72fe63 | 415 | break; |
bmcclure | 1:6d456a72fe63 | 416 | case 4: |
bmcclure | 1:6d456a72fe63 | 417 | greenRelay = OUT_ON; //Green light |
bmcclure | 1:6d456a72fe63 | 418 | strcat(displayLine2, " Green "); |
bmcclure | 1:6d456a72fe63 | 419 | break; |
bmcclure | 1:6d456a72fe63 | 420 | case 5: |
bmcclure | 1:6d456a72fe63 | 421 | damperRelay = OUT_ON; //Damper solenoid control |
bmcclure | 1:6d456a72fe63 | 422 | strcat(displayLine2, " Damper1"); |
bmcclure | 1:6d456a72fe63 | 423 | break; |
bmcclure | 1:6d456a72fe63 | 424 | case 6: |
bmcclure | 1:6d456a72fe63 | 425 | damperRelayAlt = OUT_ON; //Damper solenoid toggle control |
bmcclure | 1:6d456a72fe63 | 426 | strcat(displayLine2, " Damper2"); |
bmcclure | 1:6d456a72fe63 | 427 | break; |
bmcclure | 1:6d456a72fe63 | 428 | case 7: |
bmcclure | 1:6d456a72fe63 | 429 | // vfd = OUT_ON; //VFD Start relay |
bmcclure | 1:6d456a72fe63 | 430 | strcat(displayLine2, " "); |
bmcclure | 1:6d456a72fe63 | 431 | break; |
dattranvnfrr | 0:2f5d939d4a4a | 432 | } |
dattranvnfrr | 0:2f5d939d4a4a | 433 | } |
bmcclure | 1:6d456a72fe63 | 434 | |
bmcclure | 1:6d456a72fe63 | 435 | rgbLCD.locate(0,0); |
bmcclure | 1:6d456a72fe63 | 436 | rgbLCD.print(displayLine1); |
bmcclure | 1:6d456a72fe63 | 437 | rgbLCD.locate(0,1); |
bmcclure | 1:6d456a72fe63 | 438 | rgbLCD.print(displayLine2); |
bmcclure | 1:6d456a72fe63 | 439 | |
bmcclure | 1:6d456a72fe63 | 440 | wait(.25); |
bmcclure | 1:6d456a72fe63 | 441 | count++; |
bmcclure | 1:6d456a72fe63 | 442 | } |
bmcclure | 1:6d456a72fe63 | 443 | while(cycleStartBtt == IN_OFF || stopBtt == IN_OFF || doorClosed == IN_OFF); |
dattranvnfrr | 0:2f5d939d4a4a | 444 | } |