MicrowaveSimulation_LPC1768

Dependencies:   C12832_lcd DebounceInterrupts LM75B mbed-rtos mbed

Committer:
joinamruta
Date:
Mon Mar 17 19:27:11 2014 +0000
Revision:
0:ca76ec016be0
Microwave Simulation on LPC1768 mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joinamruta 0:ca76ec016be0 1 /********************************************************************************
joinamruta 0:ca76ec016be0 2 * Program to implement a microwave. A RTOS program to simulate a microwave *
joinamruta 0:ca76ec016be0 3 * which has the following user features: *
joinamruta 0:ca76ec016be0 4 * i) Left and right buttons to raise/lower the cook time in 1 minute increments *
joinamruta 0:ca76ec016be0 5 * ii) Top and bottom buttons to start/stop the microwave *
joinamruta 0:ca76ec016be0 6 * iii) Middle button to open/close the door *
joinamruta 0:ca76ec016be0 7 * iv) Temperature sensor to show the inside temperature *
joinamruta 0:ca76ec016be0 8 * v) LCD output to show: *
joinamruta 0:ca76ec016be0 9 * (1) Requested cook time *
joinamruta 0:ca76ec016be0 10 * (2) Elapsed cook time (max 3 minutes) *
joinamruta 0:ca76ec016be0 11 * (3) Temperature (goes up each minute by 10(?) degrees, starting with room) *
joinamruta 0:ca76ec016be0 12 * vi) LED to show: *
joinamruta 0:ca76ec016be0 13 * (1) One LED blinking to show cooking in progress *
joinamruta 0:ca76ec016be0 14 * vii) Short audio sound: *
joinamruta 0:ca76ec016be0 15 * (1) To indicate cooking done *
joinamruta 0:ca76ec016be0 16 * Timing requirements: *
joinamruta 0:ca76ec016be0 17 * 1. Cooking must stop within 1ms of door opening or stop button *
joinamruta 0:ca76ec016be0 18 * 2. Temperature sensor must be polled once every 10 seconds *
joinamruta 0:ca76ec016be0 19 * 3. Cooking time must have a 3 min max with a default of 2 min *
joinamruta 0:ca76ec016be0 20 * *
joinamruta 0:ca76ec016be0 21 * Test cases: *
joinamruta 0:ca76ec016be0 22 * The following test cases are done using black box approach. If DEBUG is *
joinamruta 0:ca76ec016be0 23 * enabled, some white box testing can be performed *
joinamruta 0:ca76ec016be0 24 * *
joinamruta 0:ca76ec016be0 25 * Test conditon Pass/Fail criteria Pass/Fail *
joinamruta 0:ca76ec016be0 26 * =============================== ============================ ========= *
joinamruta 0:ca76ec016be0 27 * 1)Push Joystick's LEFT Button Riase set cook time by 1 minute PASS *
joinamruta 0:ca76ec016be0 28 * (max 3 mins) *
joinamruta 0:ca76ec016be0 29 * 2)Push Joystick's RIGHT Button Lower set cook time by 1 minute PASS *
joinamruta 0:ca76ec016be0 30 * (min 1 min) *
joinamruta 0:ca76ec016be0 31 * 3)Push Joystick's UP Button Start microwave cooking IFF PASS *
joinamruta 0:ca76ec016be0 32 * door is closed *
joinamruta 0:ca76ec016be0 33 * 4)Push Joystick's DOWN Button Stop microwave cooking if PASS *
joinamruta 0:ca76ec016be0 34 * cooking was going on. *
joinamruta 0:ca76ec016be0 35 * 5)Push Joystick's MIDDLE Button Toggle between open and close PASS *
joinamruta 0:ca76ec016be0 36 * door positions. *
joinamruta 0:ca76ec016be0 37 * LED4 turns on if door open PASS *
joinamruta 0:ca76ec016be0 38 * LED4 turns off if door closed PASS *
joinamruta 0:ca76ec016be0 39 * 5.1)If door opened while cooking Suspend cooking immediately PASS *
joinamruta 0:ca76ec016be0 40 * was on *
joinamruta 0:ca76ec016be0 41 * (Debounce handled for all joystick buttons) *
joinamruta 0:ca76ec016be0 42 * 6)While cooking session on LED1 blinks PASS *
joinamruta 0:ca76ec016be0 43 * (STARTED State) LCD 1)shows elapsed cook time PASS *
joinamruta 0:ca76ec016be0 44 * 2)shows set cook time PASS *
joinamruta 0:ca76ec016be0 45 * 3)shows temperature(up by 10 PASS *
joinamruta 0:ca76ec016be0 46 * deg F each minute of cooking) *
joinamruta 0:ca76ec016be0 47 * Elapsed cook time is checked PASS *
joinamruta 0:ca76ec016be0 48 * against set cook time to check when *
joinamruta 0:ca76ec016be0 49 * cooking will complete.(COMPLETED STATE) *
joinamruta 0:ca76ec016be0 50 * 7)When cooking suspended Elapsed cook time suspended PASS *
joinamruta 0:ca76ec016be0 51 * (SUSPENDED State) either LED1 stops blinking PASS *
joinamruta 0:ca76ec016be0 52 * due to stop button or door *
joinamruta 0:ca76ec016be0 53 * open button *
joinamruta 0:ca76ec016be0 54 * 8)Elapsed cook time equals Cooking session COMPLETED STATE PASS *
joinamruta 0:ca76ec016be0 55 * set cook time LED1 stops blinking PASS *
joinamruta 0:ca76ec016be0 56 * speaker sounds PASS *
joinamruta 0:ca76ec016be0 57 * *
joinamruta 0:ca76ec016be0 58 *********************************************************************************/
joinamruta 0:ca76ec016be0 59
joinamruta 0:ca76ec016be0 60 #include "mbed.h"
joinamruta 0:ca76ec016be0 61 #include "LM75B.h"
joinamruta 0:ca76ec016be0 62 #include "C12832_lcd.h"
joinamruta 0:ca76ec016be0 63 #include "rtos.h"
joinamruta 0:ca76ec016be0 64 #include "DebouncedIn.h"
joinamruta 0:ca76ec016be0 65 #include "DebouncedInterrupt.h"
joinamruta 0:ca76ec016be0 66 #include "Serial.h"
joinamruta 0:ca76ec016be0 67 #include "LM75B.h"
joinamruta 0:ca76ec016be0 68
joinamruta 0:ca76ec016be0 69
joinamruta 0:ca76ec016be0 70 /*default set cook time , 2 minutes*/
joinamruta 0:ca76ec016be0 71 #define DEFAULTCOOKTIME 120
joinamruta 0:ca76ec016be0 72
joinamruta 0:ca76ec016be0 73 /*for door positions*/
joinamruta 0:ca76ec016be0 74 #define OPEN 1
joinamruta 0:ca76ec016be0 75 #define CLOSE 0
joinamruta 0:ca76ec016be0 76
joinamruta 0:ca76ec016be0 77 /*to indicate in what state a cooking session is*/
joinamruta 0:ca76ec016be0 78 #define STARTED 1
joinamruta 0:ca76ec016be0 79 #define COMPLETED 0
joinamruta 0:ca76ec016be0 80 #define SUSPENDED 2
joinamruta 0:ca76ec016be0 81
joinamruta 0:ca76ec016be0 82 /*to test proper functioning*/
joinamruta 0:ca76ec016be0 83 #define DEBUG
joinamruta 0:ca76ec016be0 84 #ifdef DEBUG
joinamruta 0:ca76ec016be0 85 Serial pc(USBTX, USBRX);
joinamruta 0:ca76ec016be0 86 #endif
joinamruta 0:ca76ec016be0 87
joinamruta 0:ca76ec016be0 88 /*function declarations*/
joinamruta 0:ca76ec016be0 89 void open_door();
joinamruta 0:ca76ec016be0 90 void time_up();
joinamruta 0:ca76ec016be0 91 void time_down();
joinamruta 0:ca76ec016be0 92 void LED_blink (void const *args);
joinamruta 0:ca76ec016be0 93 void inside_temperatureLED_blink (void const *args);
joinamruta 0:ca76ec016be0 94 void sound_speaker (void const *args);
joinamruta 0:ca76ec016be0 95 void start_cooking ();
joinamruta 0:ca76ec016be0 96 void stop_cooking ();
joinamruta 0:ca76ec016be0 97 void update_lcd(void const *args);
joinamruta 0:ca76ec016be0 98 void check_ellapsed_cook_time (void const *args);
joinamruta 0:ca76ec016be0 99 void suspendCooking(void const *args);
joinamruta 0:ca76ec016be0 100
joinamruta 0:ca76ec016be0 101 DebouncedInterrupt increase_time(p13);
joinamruta 0:ca76ec016be0 102 DebouncedInterrupt decrease_time(p16);
joinamruta 0:ca76ec016be0 103 DebouncedInterrupt start (p12);
joinamruta 0:ca76ec016be0 104 DebouncedInterrupt stop(p15);
joinamruta 0:ca76ec016be0 105 DebouncedInterrupt door_status(p14);
joinamruta 0:ca76ec016be0 106 C12832_LCD lcd;
joinamruta 0:ca76ec016be0 107 DigitalOut cook_progress(LED1);
joinamruta 0:ca76ec016be0 108 DigitalOut door_signal(LED4); //This LED will be 1 if door is open
joinamruta 0:ca76ec016be0 109 DigitalOut done_cooking(LED2);
joinamruta 0:ca76ec016be0 110 PwmOut speaker(p26);
joinamruta 0:ca76ec016be0 111 LM75B tmp(p28,p27);
joinamruta 0:ca76ec016be0 112
joinamruta 0:ca76ec016be0 113 /*set cook time, time for which the cooking should be done*/
joinamruta 0:ca76ec016be0 114 int requested_cook_time = DEFAULTCOOKTIME;
joinamruta 0:ca76ec016be0 115
joinamruta 0:ca76ec016be0 116 /*keep track if door is closed or open CLOSE :0 OPEN:1*/
joinamruta 0:ca76ec016be0 117 bool door_position = CLOSE;
joinamruta 0:ca76ec016be0 118
joinamruta 0:ca76ec016be0 119 /*cooking has been suspended or not, either due to opening of door
joinamruta 0:ca76ec016be0 120 or stop button pressing while the cooking was going on*/
joinamruta 0:ca76ec016be0 121 bool suspended_cooking_flag = false;
joinamruta 0:ca76ec016be0 122
joinamruta 0:ca76ec016be0 123 /*inside temp is room temperature*/
joinamruta 0:ca76ec016be0 124 float ctemperature;
joinamruta 0:ca76ec016be0 125 float temperature;
joinamruta 0:ca76ec016be0 126 int count = 0;
joinamruta 0:ca76ec016be0 127
joinamruta 0:ca76ec016be0 128 /*to indicate whether a particular cooking session has been started
joinamruta 0:ca76ec016be0 129 or completed.*/
joinamruta 0:ca76ec016be0 130 int a_cooking_session = COMPLETED;
joinamruta 0:ca76ec016be0 131 Timer ellapsed_cook_timer;
joinamruta 0:ca76ec016be0 132 Ticker LED_Blink_timer;
joinamruta 0:ca76ec016be0 133 Ticker get_temperature;
joinamruta 0:ca76ec016be0 134
joinamruta 0:ca76ec016be0 135
joinamruta 0:ca76ec016be0 136 /*Open and close door button interrupt service routine*/
joinamruta 0:ca76ec016be0 137 void open_door()
joinamruta 0:ca76ec016be0 138 {
joinamruta 0:ca76ec016be0 139 /*allow interrupt action to take place only if suspend_cooking
joinamruta 0:ca76ec016be0 140 action was completed*/
joinamruta 0:ca76ec016be0 141 if (suspended_cooking_flag == false) {
joinamruta 0:ca76ec016be0 142 //toggle door_position
joinamruta 0:ca76ec016be0 143 door_position = !door_position;
joinamruta 0:ca76ec016be0 144 if (door_position == OPEN) {
joinamruta 0:ca76ec016be0 145 door_signal = 1;
joinamruta 0:ca76ec016be0 146 /*if door was opened while cooking was going on
joinamruta 0:ca76ec016be0 147 then suspend cooking immediately*/
joinamruta 0:ca76ec016be0 148 if (a_cooking_session == STARTED) {
joinamruta 0:ca76ec016be0 149 suspended_cooking_flag = true;
joinamruta 0:ca76ec016be0 150 a_cooking_session = SUSPENDED;
joinamruta 0:ca76ec016be0 151 }
joinamruta 0:ca76ec016be0 152 } else {
joinamruta 0:ca76ec016be0 153 door_signal = 0;
joinamruta 0:ca76ec016be0 154 }
joinamruta 0:ca76ec016be0 155 }
joinamruta 0:ca76ec016be0 156 }
joinamruta 0:ca76ec016be0 157
joinamruta 0:ca76ec016be0 158 /*Raise cook time button interrupt service routine,
joinamruta 0:ca76ec016be0 159 raises the cook time by 1 minute increaments
joinamruta 0:ca76ec016be0 160 */
joinamruta 0:ca76ec016be0 161 void time_up()
joinamruta 0:ca76ec016be0 162 {
joinamruta 0:ca76ec016be0 163 if (requested_cook_time < 180)
joinamruta 0:ca76ec016be0 164 /*increment cooking time by 1 minute = 60 sec,max = 180 secs.*/
joinamruta 0:ca76ec016be0 165 requested_cook_time = requested_cook_time + 60;
joinamruta 0:ca76ec016be0 166 else
joinamruta 0:ca76ec016be0 167 requested_cook_time = 180;
joinamruta 0:ca76ec016be0 168 }
joinamruta 0:ca76ec016be0 169
joinamruta 0:ca76ec016be0 170
joinamruta 0:ca76ec016be0 171 /*lower cook time button interrupt service routine,
joinamruta 0:ca76ec016be0 172 lowers cook time by 1 minute decreaments
joinamruta 0:ca76ec016be0 173 */
joinamruta 0:ca76ec016be0 174 void time_down()
joinamruta 0:ca76ec016be0 175 {
joinamruta 0:ca76ec016be0 176 if (requested_cook_time > 60)
joinamruta 0:ca76ec016be0 177 /*decrement cooking time by 1 minute = 60 sec*/
joinamruta 0:ca76ec016be0 178 requested_cook_time = requested_cook_time - 60;
joinamruta 0:ca76ec016be0 179 else
joinamruta 0:ca76ec016be0 180 requested_cook_time = 60;
joinamruta 0:ca76ec016be0 181
joinamruta 0:ca76ec016be0 182 }
joinamruta 0:ca76ec016be0 183
joinamruta 0:ca76ec016be0 184 /*blink led ticker handler routine.Led blinks at interval
joinamruta 0:ca76ec016be0 185 of 0.250ms while cooking is going on.
joinamruta 0:ca76ec016be0 186 */
joinamruta 0:ca76ec016be0 187 void LED_blink ()
joinamruta 0:ca76ec016be0 188 {
joinamruta 0:ca76ec016be0 189 cook_progress= !cook_progress;
joinamruta 0:ca76ec016be0 190 }
joinamruta 0:ca76ec016be0 191
joinamruta 0:ca76ec016be0 192 /*temperature ticker handler routine to read inside temperature every 10 secs.
joinamruta 0:ca76ec016be0 193 */
joinamruta 0:ca76ec016be0 194 void inside_temperature ()
joinamruta 0:ca76ec016be0 195 {
joinamruta 0:ca76ec016be0 196 ctemperature = (1.8)*tmp.read()+32;
joinamruta 0:ca76ec016be0 197 /*to make the temperature displayed on lcd to go up by 10 deg F every minute*/
joinamruta 0:ca76ec016be0 198 if (count < 7) {
joinamruta 0:ca76ec016be0 199 count = count +1;
joinamruta 0:ca76ec016be0 200 if (count == 6) {
joinamruta 0:ca76ec016be0 201 temperature = temperature + 10;
joinamruta 0:ca76ec016be0 202 count = 0;
joinamruta 0:ca76ec016be0 203 }
joinamruta 0:ca76ec016be0 204 }
joinamruta 0:ca76ec016be0 205 }
joinamruta 0:ca76ec016be0 206
joinamruta 0:ca76ec016be0 207 /*start cooking button interrupt service routine.
joinamruta 0:ca76ec016be0 208 */
joinamruta 0:ca76ec016be0 209 void start_cooking ()
joinamruta 0:ca76ec016be0 210 {
joinamruta 0:ca76ec016be0 211 if (door_position == CLOSE) {
joinamruta 0:ca76ec016be0 212 if (a_cooking_session != STARTED) {
joinamruta 0:ca76ec016be0 213 if (a_cooking_session == COMPLETED) {
joinamruta 0:ca76ec016be0 214 a_cooking_session = STARTED;//a fresh cooking session has started
joinamruta 0:ca76ec016be0 215 temperature = (1.8)*tmp.read()+32;//starting at room temperature
joinamruta 0:ca76ec016be0 216 }
joinamruta 0:ca76ec016be0 217 if (a_cooking_session == SUSPENDED)
joinamruta 0:ca76ec016be0 218 a_cooking_session = STARTED;//a suspended session restarted
joinamruta 0:ca76ec016be0 219 ellapsed_cook_timer.start();
joinamruta 0:ca76ec016be0 220 get_temperature.attach(&inside_temperature, 10.0); //read temperature every 10sec
joinamruta 0:ca76ec016be0 221 LED_Blink_timer.attach(&LED_blink,0.250);
joinamruta 0:ca76ec016be0 222 }
joinamruta 0:ca76ec016be0 223 }
joinamruta 0:ca76ec016be0 224 }
joinamruta 0:ca76ec016be0 225
joinamruta 0:ca76ec016be0 226 /*stop cooking button interrupt service routine.
joinamruta 0:ca76ec016be0 227 */
joinamruta 0:ca76ec016be0 228 void stop_cooking ()
joinamruta 0:ca76ec016be0 229 {
joinamruta 0:ca76ec016be0 230 if (a_cooking_session == STARTED) {
joinamruta 0:ca76ec016be0 231 a_cooking_session = SUSPENDED;
joinamruta 0:ca76ec016be0 232 ellapsed_cook_timer.stop();
joinamruta 0:ca76ec016be0 233 get_temperature.detach();
joinamruta 0:ca76ec016be0 234 LED_Blink_timer.detach();
joinamruta 0:ca76ec016be0 235 cook_progress = 0;
joinamruta 0:ca76ec016be0 236
joinamruta 0:ca76ec016be0 237 }
joinamruta 0:ca76ec016be0 238 }
joinamruta 0:ca76ec016be0 239
joinamruta 0:ca76ec016be0 240
joinamruta 0:ca76ec016be0 241 /*function that sounds the speaker once cooking is completed.
joinamruta 0:ca76ec016be0 242 */
joinamruta 0:ca76ec016be0 243 void start_speaker()
joinamruta 0:ca76ec016be0 244 {
joinamruta 0:ca76ec016be0 245 speaker.period(1.0/5000);
joinamruta 0:ca76ec016be0 246 while(door_position != OPEN && a_cooking_session == COMPLETED) {
joinamruta 0:ca76ec016be0 247 speaker = 0.5;
joinamruta 0:ca76ec016be0 248 wait(0.1);
joinamruta 0:ca76ec016be0 249 speaker = 0.0;
joinamruta 0:ca76ec016be0 250 wait(0.1);
joinamruta 0:ca76ec016be0 251 }
joinamruta 0:ca76ec016be0 252 speaker = 0.0;
joinamruta 0:ca76ec016be0 253 }
joinamruta 0:ca76ec016be0 254
joinamruta 0:ca76ec016be0 255
joinamruta 0:ca76ec016be0 256 /*Thread that displays/updates the :
joinamruta 0:ca76ec016be0 257 (1) Requested cook time
joinamruta 0:ca76ec016be0 258 (2) Elapsed cook time (max 3 minutes)
joinamruta 0:ca76ec016be0 259 (3) Temperature (goes up each minute by 10 degrees(F), starting with room)
joinamruta 0:ca76ec016be0 260 */
joinamruta 0:ca76ec016be0 261 void update_lcd(void const *args)
joinamruta 0:ca76ec016be0 262 {
joinamruta 0:ca76ec016be0 263 lcd.cls();
joinamruta 0:ca76ec016be0 264 while(true) {
joinamruta 0:ca76ec016be0 265 lcd.locate(0,0);
joinamruta 0:ca76ec016be0 266 lcd.printf("Elapsed time : %0.2f sec",ellapsed_cook_timer.read());
joinamruta 0:ca76ec016be0 267 lcd.locate(0, 8);
joinamruta 0:ca76ec016be0 268 lcd.printf("Set cook time : %d min",requested_cook_time/60);
joinamruta 0:ca76ec016be0 269 lcd.locate(0, 16);
joinamruta 0:ca76ec016be0 270 lcd.printf("Temperature : %0.2f deg F", temperature);
joinamruta 0:ca76ec016be0 271 Thread::wait (1000);
joinamruta 0:ca76ec016be0 272 }
joinamruta 0:ca76ec016be0 273 }
joinamruta 0:ca76ec016be0 274
joinamruta 0:ca76ec016be0 275 /*Thread that keeps track of how much time has elapsed
joinamruta 0:ca76ec016be0 276 since cooking is going on(does not includes the time when cooking
joinamruta 0:ca76ec016be0 277 suspended)in order to cook for requested amount of cook time
joinamruta 0:ca76ec016be0 278 */
joinamruta 0:ca76ec016be0 279 void check_ellapsed_cook_time (void const *args)
joinamruta 0:ca76ec016be0 280 {
joinamruta 0:ca76ec016be0 281 Thread suspend_cooking(suspendCooking, NULL, osPriorityHigh);
joinamruta 0:ca76ec016be0 282 #ifdef DEBUG
joinamruta 0:ca76ec016be0 283 pc.printf("Created Thread suspend_cooking\r\n");
joinamruta 0:ca76ec016be0 284 #endif
joinamruta 0:ca76ec016be0 285 while (true) {
joinamruta 0:ca76ec016be0 286 if (suspended_cooking_flag == true)
joinamruta 0:ca76ec016be0 287 suspend_cooking.signal_set(0x1);//IPC
joinamruta 0:ca76ec016be0 288 else {
joinamruta 0:ca76ec016be0 289 if (a_cooking_session == STARTED && (ellapsed_cook_timer.read() >= requested_cook_time) ) {
joinamruta 0:ca76ec016be0 290 a_cooking_session = COMPLETED;
joinamruta 0:ca76ec016be0 291 ellapsed_cook_timer.stop();
joinamruta 0:ca76ec016be0 292 ellapsed_cook_timer.reset();
joinamruta 0:ca76ec016be0 293 get_temperature.detach();
joinamruta 0:ca76ec016be0 294 LED_Blink_timer.detach();
joinamruta 0:ca76ec016be0 295 start_speaker();
joinamruta 0:ca76ec016be0 296 }
joinamruta 0:ca76ec016be0 297 }
joinamruta 0:ca76ec016be0 298 Thread::wait(500);
joinamruta 0:ca76ec016be0 299 }
joinamruta 0:ca76ec016be0 300 }
joinamruta 0:ca76ec016be0 301
joinamruta 0:ca76ec016be0 302 /*Thread that wakes up(on a signal,an IPC mechanism) in order to
joinamruta 0:ca76ec016be0 303 complete the remaining activities of stop/suspend cooking(action)
joinamruta 0:ca76ec016be0 304 when microwave door was suddenly opened in the middle of cooking.
joinamruta 0:ca76ec016be0 305 When the open door interrupt occurs while cooking was on
joinamruta 0:ca76ec016be0 306 the corresponding interrupt service routine wakes this thread up
joinamruta 0:ca76ec016be0 307 by sneding a signal to it.
joinamruta 0:ca76ec016be0 308 */
joinamruta 0:ca76ec016be0 309 void suspendCooking (void const *args)
joinamruta 0:ca76ec016be0 310 {
joinamruta 0:ca76ec016be0 311 while (1) {
joinamruta 0:ca76ec016be0 312 #ifdef DEBUG
joinamruta 0:ca76ec016be0 313 pc.printf("suspend_cooking Thread waiting for signal\r\n");
joinamruta 0:ca76ec016be0 314 #endif
joinamruta 0:ca76ec016be0 315 Thread::signal_wait(0x1); //IPC
joinamruta 0:ca76ec016be0 316 #ifdef DEBUG
joinamruta 0:ca76ec016be0 317 pc.printf("suspend_cooking Thread awakened by a siganl\r\n");
joinamruta 0:ca76ec016be0 318 #endif
joinamruta 0:ca76ec016be0 319 ellapsed_cook_timer.stop();
joinamruta 0:ca76ec016be0 320 //cook_status = OFF;
joinamruta 0:ca76ec016be0 321 get_temperature.detach();
joinamruta 0:ca76ec016be0 322 LED_Blink_timer.detach();
joinamruta 0:ca76ec016be0 323 cook_progress = 0;
joinamruta 0:ca76ec016be0 324 suspended_cooking_flag = false;
joinamruta 0:ca76ec016be0 325 }
joinamruta 0:ca76ec016be0 326 }
joinamruta 0:ca76ec016be0 327
joinamruta 0:ca76ec016be0 328 int main()
joinamruta 0:ca76ec016be0 329 {
joinamruta 0:ca76ec016be0 330 increase_time.attach(&time_up);
joinamruta 0:ca76ec016be0 331 decrease_time.attach(&time_down);
joinamruta 0:ca76ec016be0 332 start.attach(&start_cooking);
joinamruta 0:ca76ec016be0 333 stop.attach(&stop_cooking);
joinamruta 0:ca76ec016be0 334 door_status.attach(&open_door);
joinamruta 0:ca76ec016be0 335 door_signal = door_position;
joinamruta 0:ca76ec016be0 336
joinamruta 0:ca76ec016be0 337 #ifdef DEBUG
joinamruta 0:ca76ec016be0 338 pc.printf("Attached all interrupt handlers\r\n");
joinamruta 0:ca76ec016be0 339 #endif
joinamruta 0:ca76ec016be0 340 Thread lcd_display(update_lcd, NULL, osPriorityAboveNormal);
joinamruta 0:ca76ec016be0 341 #ifdef DEBUG
joinamruta 0:ca76ec016be0 342 pc.printf("Created Thread lcd_display\r\n");
joinamruta 0:ca76ec016be0 343 #endif
joinamruta 0:ca76ec016be0 344 Thread track_ellapsed_cook_time(check_ellapsed_cook_time, NULL, osPriorityAboveNormal);
joinamruta 0:ca76ec016be0 345 #ifdef DEBUG
joinamruta 0:ca76ec016be0 346 pc.printf("Created Thread track_ellapsed_cook_time\r\n");
joinamruta 0:ca76ec016be0 347 #endif
joinamruta 0:ca76ec016be0 348
joinamruta 0:ca76ec016be0 349 while (true) {
joinamruta 0:ca76ec016be0 350 Thread::wait(1500);
joinamruta 0:ca76ec016be0 351 }
joinamruta 0:ca76ec016be0 352 }