A simple microwave demo

Dependencies:   C12832_lcd LM75B mbed-rtos mbed

Committer:
joeroop
Date:
Sun Mar 16 02:18:48 2014 +0000
Revision:
3:4fb0721ce794
Parent:
2:324dc8b89365
Child:
4:cd87e2050344
working example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joeroop 0:3a19dcea1a01 1
joeroop 0:3a19dcea1a01 2
joeroop 0:3a19dcea1a01 3
joeroop 0:3a19dcea1a01 4 #include "mbed.h"
joeroop 0:3a19dcea1a01 5 #include "rtos.h"
joeroop 0:3a19dcea1a01 6 #include "C12832_lcd.h" //LCD interface
joeroop 0:3a19dcea1a01 7 #include "LM75B.h" //temperature interface
joeroop 0:3a19dcea1a01 8
joeroop 1:896789dcc911 9
joeroop 1:896789dcc911 10 #define DEBOUNCE_TIME_MS 10
joeroop 2:324dc8b89365 11 #define MAX_COOK_TIME_S 20 //3min
joeroop 1:896789dcc911 12 #define INIT_COOK_TIME_S 5
joeroop 2:324dc8b89365 13 #define TEMP_INTERVAL_S 5
joeroop 1:896789dcc911 14
joeroop 1:896789dcc911 15
joeroop 0:3a19dcea1a01 16 //globals and types
joeroop 0:3a19dcea1a01 17 DigitalOut led1(LED1);
joeroop 0:3a19dcea1a01 18 DigitalOut led2(LED2);
joeroop 1:896789dcc911 19 DigitalOut led3(LED3);
joeroop 1:896789dcc911 20 DigitalOut led4(LED4);
joeroop 0:3a19dcea1a01 21 C12832_LCD lcd;
joeroop 2:324dc8b89365 22 PwmOut spkr(p26);
joeroop 2:324dc8b89365 23 LM75B therm(p28,p27);
joeroop 1:896789dcc911 24 Timer debounceTimer;
joeroop 1:896789dcc911 25 InterruptIn irptTimeDn(p16); //cook down
joeroop 1:896789dcc911 26 InterruptIn irptTimeUp(p13); //cook up
joeroop 1:896789dcc911 27 InterruptIn irptStart(p15); //start cooking
joeroop 1:896789dcc911 28 InterruptIn irptStop(p12); //stop cooking
joeroop 1:896789dcc911 29 InterruptIn irptDoor(p14); //door interrupt
joeroop 1:896789dcc911 30 Thread *proxy_lcd;
joeroop 1:896789dcc911 31 Thread *proxy_temp;
joeroop 1:896789dcc911 32 Thread *proxy_sound;
joeroop 1:896789dcc911 33 Thread *proxy_state;
joeroop 1:896789dcc911 34 Thread *proxy_led;
joeroop 1:896789dcc911 35 Thread *proxy_timer;
joeroop 1:896789dcc911 36
joeroop 1:896789dcc911 37
joeroop 1:896789dcc911 38 typedef enum { //start at one as we are using this as signals
joeroop 1:896789dcc911 39 //states
joeroop 1:896789dcc911 40 WAITING = 1,
joeroop 1:896789dcc911 41 COOKING,
joeroop 1:896789dcc911 42 DONE,
joeroop 1:896789dcc911 43 //interrupts signals
joeroop 1:896789dcc911 44 TIMEUP,
joeroop 1:896789dcc911 45 TIMEDN,
joeroop 1:896789dcc911 46 START,
joeroop 1:896789dcc911 47 STOP,
joeroop 1:896789dcc911 48 DOOR
joeroop 1:896789dcc911 49 } state_t;
joeroop 1:896789dcc911 50
joeroop 1:896789dcc911 51 char *stateStr[] = {"NULL","WAIT","COOK","DONE"};
joeroop 1:896789dcc911 52
joeroop 0:3a19dcea1a01 53
joeroop 1:896789dcc911 54 typedef enum {TEMP_VAL, TIME_ELPS, TIME_RQST} type_t;
joeroop 1:896789dcc911 55 typedef enum {STATE, TEMP, SOUND, LCD, LED, TIMER, ALL} thread_t;
joeroop 1:896789dcc911 56 char *threadStr[] = {"STATE", "TEMP", "SOUND", "LCD", "LED", "TIMER", "ALL"};
joeroop 1:896789dcc911 57
joeroop 1:896789dcc911 58 typedef struct {
joeroop 1:896789dcc911 59 state_t state;
joeroop 1:896789dcc911 60 type_t type;
joeroop 1:896789dcc911 61 union {
joeroop 1:896789dcc911 62 float temp;
joeroop 1:896789dcc911 63 int time_elapsed; //seconds of cooking
joeroop 1:896789dcc911 64 int time_request; //seconds
joeroop 2:324dc8b89365 65 } data;
joeroop 2:324dc8b89365 66 } message_t;
joeroop 1:896789dcc911 67
joeroop 1:896789dcc911 68
joeroop 1:896789dcc911 69
joeroop 1:896789dcc911 70
joeroop 2:324dc8b89365 71 MemoryPool<message_t,10> mpool; //used to hold all messages
joeroop 2:324dc8b89365 72 Queue<message_t,10> queue; //used to hold the messages
joeroop 0:3a19dcea1a01 73
joeroop 1:896789dcc911 74 bool debounce(void);
joeroop 1:896789dcc911 75 void blink_led(void const *args);
joeroop 2:324dc8b89365 76 void send_time(void const *args);
joeroop 1:896789dcc911 77
joeroop 1:896789dcc911 78 //Threads
joeroop 1:896789dcc911 79 void thread_state(void const *args);
joeroop 1:896789dcc911 80 void thread_lcd(void const *args);
joeroop 1:896789dcc911 81 void thread_temp(void const *args);
joeroop 1:896789dcc911 82 void thread_sound(void const *args);
joeroop 1:896789dcc911 83 void thread_led(void const *args);
joeroop 1:896789dcc911 84 void thread_timer(void const *args);
joeroop 1:896789dcc911 85
joeroop 1:896789dcc911 86
joeroop 1:896789dcc911 87
joeroop 1:896789dcc911 88 //ISRs
joeroop 1:896789dcc911 89 void isrTimeUp(void);
joeroop 1:896789dcc911 90 void isrTimeDn(void);
joeroop 1:896789dcc911 91 void isrStart(void);
joeroop 1:896789dcc911 92 void isrStop(void);
joeroop 1:896789dcc911 93 void isrDoor(void);
joeroop 1:896789dcc911 94
joeroop 1:896789dcc911 95
joeroop 0:3a19dcea1a01 96
joeroop 0:3a19dcea1a01 97 int main(void){
joeroop 1:896789dcc911 98 debounceTimer.start();
joeroop 1:896789dcc911 99 //interrupts
joeroop 1:896789dcc911 100 irptTimeUp.rise(&isrTimeUp);
joeroop 1:896789dcc911 101 irptTimeDn.rise(&isrTimeDn);
joeroop 1:896789dcc911 102 irptStart.rise(&isrStart);
joeroop 1:896789dcc911 103 irptStop.rise(&isrStop);
joeroop 1:896789dcc911 104 irptDoor.rise(&isrDoor); //debounce everything except for the door
joeroop 1:896789dcc911 105
joeroop 1:896789dcc911 106 Thread t1(thread_state);
joeroop 1:896789dcc911 107 Thread t2(thread_temp);
joeroop 1:896789dcc911 108 Thread t3(thread_sound);
joeroop 1:896789dcc911 109 Thread t4(thread_lcd);
joeroop 1:896789dcc911 110 Thread t5(thread_led);
joeroop 1:896789dcc911 111 Thread t6(thread_timer);
joeroop 1:896789dcc911 112
joeroop 2:324dc8b89365 113 proxy_state = &t1;
joeroop 2:324dc8b89365 114 proxy_temp = &t2;
joeroop 2:324dc8b89365 115 proxy_sound = &t3;
joeroop 2:324dc8b89365 116 proxy_lcd = &t4;
joeroop 2:324dc8b89365 117 proxy_led = &t5;
joeroop 2:324dc8b89365 118 proxy_timer = &t6;
joeroop 0:3a19dcea1a01 119
joeroop 1:896789dcc911 120
joeroop 1:896789dcc911 121
joeroop 3:4fb0721ce794 122 //t1.set_priority(osPriorityRealtime);
joeroop 2:324dc8b89365 123 proxy_state->signal_set(WAITING); //initialize all the threads
joeroop 1:896789dcc911 124
joeroop 0:3a19dcea1a01 125 while(1){
joeroop 0:3a19dcea1a01 126 Thread::wait(250);
joeroop 0:3a19dcea1a01 127 }
joeroop 0:3a19dcea1a01 128 }
joeroop 0:3a19dcea1a01 129
joeroop 1:896789dcc911 130 //function for a global debounce on the isrstick
joeroop 1:896789dcc911 131 bool debounce(void){
joeroop 1:896789dcc911 132 if(debounceTimer.read_ms() > DEBOUNCE_TIME_MS){
joeroop 1:896789dcc911 133 debounceTimer.reset();
joeroop 1:896789dcc911 134 return true;
joeroop 1:896789dcc911 135 }else{
joeroop 1:896789dcc911 136 return false;
joeroop 1:896789dcc911 137 }
joeroop 1:896789dcc911 138 }
joeroop 1:896789dcc911 139 //ISRs
joeroop 1:896789dcc911 140 void isrTimeUp(void){
joeroop 1:896789dcc911 141 if(debounce()){
joeroop 1:896789dcc911 142 proxy_state->signal_set(TIMEUP); //left
joeroop 1:896789dcc911 143 }
joeroop 1:896789dcc911 144 }
joeroop 1:896789dcc911 145 void isrTimeDn(void){
joeroop 1:896789dcc911 146 if(debounce()){
joeroop 1:896789dcc911 147 proxy_state->signal_set(TIMEDN); //right
joeroop 1:896789dcc911 148 }
joeroop 1:896789dcc911 149 }
joeroop 1:896789dcc911 150 void isrStart(void){
joeroop 1:896789dcc911 151 if(debounce()){
joeroop 1:896789dcc911 152 proxy_state->signal_set(START); //up
joeroop 1:896789dcc911 153 }
joeroop 1:896789dcc911 154 }
joeroop 1:896789dcc911 155 void isrStop(void){
joeroop 1:896789dcc911 156 if(debounce()){
joeroop 1:896789dcc911 157 proxy_state->signal_set(STOP); //down
joeroop 1:896789dcc911 158 }
joeroop 1:896789dcc911 159 }
joeroop 1:896789dcc911 160 void isrDoor(void){
joeroop 1:896789dcc911 161 //no debounce this is most important function!
joeroop 1:896789dcc911 162 proxy_state->signal_set(DOOR);
joeroop 1:896789dcc911 163 }
joeroop 1:896789dcc911 164
joeroop 1:896789dcc911 165 //State thread to do most of the main state machine logic
joeroop 1:896789dcc911 166 void thread_state(void const *args){
joeroop 1:896789dcc911 167 osEvent evt;
joeroop 1:896789dcc911 168 int32_t mask;
joeroop 1:896789dcc911 169 bool openDoor = false; //start with door closed
joeroop 1:896789dcc911 170 state_t state = WAITING; //WAITING, COOKING, DONE
joeroop 1:896789dcc911 171 while(1){
joeroop 1:896789dcc911 172 evt = Thread::signal_wait(0);
joeroop 1:896789dcc911 173 mask = evt.value.signals;
joeroop 1:896789dcc911 174 switch(mask){
joeroop 1:896789dcc911 175 case WAITING:
joeroop 1:896789dcc911 176 state = WAITING;
joeroop 2:324dc8b89365 177 proxy_led->signal_set(state);
joeroop 2:324dc8b89365 178 proxy_timer->signal_set(state);
joeroop 2:324dc8b89365 179 proxy_temp->signal_set(state);
joeroop 1:896789dcc911 180 break;
joeroop 1:896789dcc911 181 case COOKING:
joeroop 2:324dc8b89365 182 if(!openDoor){ //can't cook if door is open
joeroop 2:324dc8b89365 183 state = COOKING;
joeroop 2:324dc8b89365 184 proxy_led->signal_set(state);
joeroop 2:324dc8b89365 185 proxy_timer->signal_set(state);
joeroop 2:324dc8b89365 186 proxy_temp->signal_set(state);
joeroop 2:324dc8b89365 187 }
joeroop 1:896789dcc911 188 break;
joeroop 1:896789dcc911 189 case DONE: //timer can signal this
joeroop 2:324dc8b89365 190 state = DONE;
joeroop 2:324dc8b89365 191 //tell everyone we are done
joeroop 2:324dc8b89365 192 proxy_led->signal_set(state);
joeroop 2:324dc8b89365 193 proxy_timer->signal_set(state);
joeroop 2:324dc8b89365 194 proxy_temp->signal_set(state);
joeroop 2:324dc8b89365 195
joeroop 2:324dc8b89365 196 proxy_state->signal_set(WAITING); //goto waiting
joeroop 1:896789dcc911 197 break;
joeroop 1:896789dcc911 198 case TIMEUP: //change the timer up
joeroop 1:896789dcc911 199 if(state == WAITING) proxy_timer->signal_set(TIMEUP);
joeroop 1:896789dcc911 200 break;
joeroop 1:896789dcc911 201 case TIMEDN: //change the timer down
joeroop 1:896789dcc911 202 if(state == WAITING) proxy_timer->signal_set(TIMEDN);
joeroop 1:896789dcc911 203 break;
joeroop 1:896789dcc911 204 case START:
joeroop 3:4fb0721ce794 205 if(state == WAITING) proxy_state->signal_set(COOKING); //
joeroop 1:896789dcc911 206 break;
joeroop 1:896789dcc911 207 case STOP:
joeroop 3:4fb0721ce794 208 if(state == COOKING) proxy_state->signal_set(state);
joeroop 1:896789dcc911 209 break;
joeroop 1:896789dcc911 210 case DOOR: //door changed state
joeroop 1:896789dcc911 211 openDoor = !openDoor;
joeroop 1:896789dcc911 212 state = (openDoor == true) ? DONE : WAITING; //open door then done else state back to waiting
joeroop 2:324dc8b89365 213 led4 = openDoor;
joeroop 2:324dc8b89365 214 proxy_state->signal_set(state); //signal back to state thread
joeroop 2:324dc8b89365 215 break;
joeroop 2:324dc8b89365 216 }
joeroop 2:324dc8b89365 217 }
joeroop 2:324dc8b89365 218 }
joeroop 2:324dc8b89365 219 //helper function for the timer thread
joeroop 2:324dc8b89365 220 void send_time(void const *args){
joeroop 2:324dc8b89365 221 int time = (*((int*)args))--; //have the time in seconds send to lcd now
joeroop 2:324dc8b89365 222 state_t state = COOKING;
joeroop 2:324dc8b89365 223 if(time == 0){
joeroop 2:324dc8b89365 224 state = DONE;
joeroop 2:324dc8b89365 225 proxy_state->signal_set(state); //tell all threads cooking time up
joeroop 2:324dc8b89365 226 proxy_sound->signal_set(state);
joeroop 2:324dc8b89365 227 }
joeroop 2:324dc8b89365 228 proxy_temp->signal_set(state); //use this timer to schedule temperature read
joeroop 2:324dc8b89365 229
joeroop 2:324dc8b89365 230 message_t *msg = mpool.alloc(); //allocate a new message
joeroop 2:324dc8b89365 231 msg->state = state;
joeroop 2:324dc8b89365 232 msg->type = TIME_ELPS;
joeroop 2:324dc8b89365 233 msg->data.time_elapsed = time;
joeroop 2:324dc8b89365 234 queue.put(msg);
joeroop 2:324dc8b89365 235 }
joeroop 2:324dc8b89365 236
joeroop 2:324dc8b89365 237 void thread_timer(void const *args){
joeroop 2:324dc8b89365 238 int time_set, time;
joeroop 2:324dc8b89365 239 time_set = INIT_COOK_TIME_S;
joeroop 2:324dc8b89365 240 int *ptime = &time;
joeroop 2:324dc8b89365 241 RtosTimer timer(send_time, osTimerPeriodic,(void*)ptime);
joeroop 2:324dc8b89365 242 osEvent evt;
joeroop 2:324dc8b89365 243 int32_t sig;
joeroop 2:324dc8b89365 244 state_t state;
joeroop 2:324dc8b89365 245 while(1){
joeroop 2:324dc8b89365 246 evt = Thread::signal_wait(0); //will time out then loop not needed
joeroop 2:324dc8b89365 247 sig = evt.value.signals;
joeroop 2:324dc8b89365 248 switch(sig){
joeroop 2:324dc8b89365 249 case WAITING:
joeroop 2:324dc8b89365 250 state = WAITING;
joeroop 2:324dc8b89365 251 break;
joeroop 2:324dc8b89365 252 case COOKING:
joeroop 2:324dc8b89365 253 if(state != COOKING){ //protect agains multiple start pushed if already cooking
joeroop 2:324dc8b89365 254 timer.stop();
joeroop 2:324dc8b89365 255 state = COOKING;
joeroop 2:324dc8b89365 256 time = time_set;
joeroop 2:324dc8b89365 257 timer.start(1000); //this is the increments of the timer 1s
joeroop 2:324dc8b89365 258 }
joeroop 2:324dc8b89365 259 break;
joeroop 2:324dc8b89365 260 case DONE:
joeroop 2:324dc8b89365 261 if(state != DONE){
joeroop 2:324dc8b89365 262 state = DONE;
joeroop 2:324dc8b89365 263 time = INIT_COOK_TIME_S;
joeroop 2:324dc8b89365 264 timer.stop();
joeroop 2:324dc8b89365 265 }
joeroop 2:324dc8b89365 266 break;
joeroop 2:324dc8b89365 267 case TIMEUP:
joeroop 2:324dc8b89365 268 if(state == WAITING){
joeroop 2:324dc8b89365 269 time_set = (++time_set) > MAX_COOK_TIME_S ? MAX_COOK_TIME_S : time_set; //check limits
joeroop 2:324dc8b89365 270 }
joeroop 2:324dc8b89365 271 break;
joeroop 2:324dc8b89365 272 case TIMEDN:
joeroop 2:324dc8b89365 273 if(state == WAITING)
joeroop 2:324dc8b89365 274 time_set = (--time_set) < 1 ? 1 : time_set; //check limits
joeroop 2:324dc8b89365 275 break;
joeroop 2:324dc8b89365 276 }
joeroop 2:324dc8b89365 277 if(sig){
joeroop 2:324dc8b89365 278 message_t *msg = mpool.alloc(); //allocate a new message
joeroop 2:324dc8b89365 279 msg->state = state;
joeroop 2:324dc8b89365 280 msg->type = TIME_RQST;
joeroop 2:324dc8b89365 281 msg->data.time_request = time_set;
joeroop 2:324dc8b89365 282 queue.put(msg);
joeroop 2:324dc8b89365 283 }
joeroop 2:324dc8b89365 284 }
joeroop 2:324dc8b89365 285 }
joeroop 2:324dc8b89365 286 //Threads
joeroop 2:324dc8b89365 287 void thread_lcd(void const *args){
joeroop 2:324dc8b89365 288 osEvent evt;
joeroop 2:324dc8b89365 289 int32_t sig;
joeroop 2:324dc8b89365 290 state_t state;
joeroop 2:324dc8b89365 291 int time_set = 0;
joeroop 2:324dc8b89365 292 lcd.cls();
joeroop 2:324dc8b89365 293 while(1){
joeroop 2:324dc8b89365 294 evt = queue.get(10); //wait for data message to post
joeroop 2:324dc8b89365 295 if(evt.status == osEventMessage){
joeroop 2:324dc8b89365 296 message_t *msg = (message_t*)evt.value.p;
joeroop 2:324dc8b89365 297 lcd.locate(70,0);
joeroop 2:324dc8b89365 298 if(msg->state)
joeroop 2:324dc8b89365 299 lcd.printf("State: %s ",stateStr[msg->state]);
joeroop 2:324dc8b89365 300 switch(msg->type){
joeroop 2:324dc8b89365 301 case TIME_RQST:
joeroop 2:324dc8b89365 302 time_set = msg->data.time_request;
joeroop 2:324dc8b89365 303 lcd.locate(0,0);
joeroop 2:324dc8b89365 304 lcd.printf("Request: %3d ",time_set);
joeroop 2:324dc8b89365 305 break;
joeroop 2:324dc8b89365 306 case TIME_ELPS:
joeroop 2:324dc8b89365 307 lcd.locate(0,10);
joeroop 2:324dc8b89365 308 lcd.printf("Elapsed: %3d ",time_set - msg->data.time_elapsed);
joeroop 2:324dc8b89365 309 break;
joeroop 2:324dc8b89365 310 case TEMP_VAL:
joeroop 2:324dc8b89365 311 lcd.locate(0,20);
joeroop 2:324dc8b89365 312 lcd.printf("Temp: %-3.2f ",msg->data.temp);
joeroop 2:324dc8b89365 313 break;
joeroop 2:324dc8b89365 314 }
joeroop 2:324dc8b89365 315 mpool.free(msg);
joeroop 2:324dc8b89365 316 }
joeroop 2:324dc8b89365 317 }
joeroop 2:324dc8b89365 318 }
joeroop 2:324dc8b89365 319
joeroop 2:324dc8b89365 320 void thread_temp(void const *args){
joeroop 2:324dc8b89365 321 osEvent evt;
joeroop 2:324dc8b89365 322 int32_t sig;
joeroop 2:324dc8b89365 323 int seconds = -1;
joeroop 2:324dc8b89365 324 float temp = 0.0;
joeroop 2:324dc8b89365 325 while(1){
joeroop 2:324dc8b89365 326 evt = Thread::signal_wait(0);
joeroop 2:324dc8b89365 327 sig = evt.value.signals;
joeroop 2:324dc8b89365 328 switch(sig){
joeroop 2:324dc8b89365 329 case COOKING:
joeroop 2:324dc8b89365 330 if(!(seconds++ % TEMP_INTERVAL_S)){
joeroop 2:324dc8b89365 331 temp+= 10.0;
joeroop 2:324dc8b89365 332 }else{
joeroop 2:324dc8b89365 333 sig = 0x0; //set to zero so don't print since no changes
joeroop 2:324dc8b89365 334 }
joeroop 2:324dc8b89365 335 break;
joeroop 2:324dc8b89365 336 case WAITING:
joeroop 2:324dc8b89365 337 case DONE:
joeroop 2:324dc8b89365 338 seconds = -1;
joeroop 2:324dc8b89365 339 temp = 0.0;
joeroop 2:324dc8b89365 340 break;
joeroop 2:324dc8b89365 341 }
joeroop 2:324dc8b89365 342 if(sig){
joeroop 2:324dc8b89365 343 message_t *msg = mpool.alloc(); //allocate a new message
joeroop 2:324dc8b89365 344 msg->state = (state_t)0; //don't pass a value
joeroop 2:324dc8b89365 345 msg->type = TEMP_VAL;
joeroop 2:324dc8b89365 346 msg->data.temp = seconds > 0 ? temp+9.0/5.0*therm.read()+32.0 : 0.0;
joeroop 2:324dc8b89365 347 queue.put(msg);
joeroop 2:324dc8b89365 348 }
joeroop 2:324dc8b89365 349 }
joeroop 2:324dc8b89365 350 }
joeroop 2:324dc8b89365 351 void thread_sound(void const *args){
joeroop 2:324dc8b89365 352 osEvent evt;
joeroop 2:324dc8b89365 353 int32_t sig;
joeroop 2:324dc8b89365 354 while(1){
joeroop 2:324dc8b89365 355 evt = Thread::signal_wait(0);
joeroop 2:324dc8b89365 356 sig = evt.value.signals;
joeroop 2:324dc8b89365 357 switch(sig){
joeroop 2:324dc8b89365 358 case DONE:
joeroop 2:324dc8b89365 359 spkr.period(1.0/5000);
joeroop 2:324dc8b89365 360 spkr=0.5;
joeroop 2:324dc8b89365 361 Thread::wait(1000);
joeroop 2:324dc8b89365 362 spkr=0.0;
joeroop 1:896789dcc911 363 break;
joeroop 1:896789dcc911 364 }
joeroop 1:896789dcc911 365 }
joeroop 1:896789dcc911 366 }
joeroop 1:896789dcc911 367 //helper function to thread_led used to blink led
joeroop 1:896789dcc911 368 void blink_led(void const *args){
joeroop 1:896789dcc911 369 led1 = !led1;
joeroop 1:896789dcc911 370 }
joeroop 1:896789dcc911 371 //Thread led to blink the light when cooking and stop when done
joeroop 1:896789dcc911 372 void thread_led(void const *args){
joeroop 1:896789dcc911 373 RtosTimer timer(blink_led, osTimerPeriodic);
joeroop 1:896789dcc911 374 osEvent evt;
joeroop 1:896789dcc911 375 int32_t sig;
joeroop 0:3a19dcea1a01 376 while(1){
joeroop 1:896789dcc911 377 //may need to sleep somewhere to give up thread check to see if signal_wait equiv of wait
joeroop 1:896789dcc911 378 evt = Thread::signal_wait(0); //will time out then loop not needed
joeroop 1:896789dcc911 379 sig = evt.value.signals;
joeroop 1:896789dcc911 380 switch(sig){
joeroop 1:896789dcc911 381 case COOKING:
joeroop 1:896789dcc911 382 timer.start(250);
joeroop 1:896789dcc911 383 break;
joeroop 1:896789dcc911 384 case DONE:
joeroop 1:896789dcc911 385 timer.stop();
joeroop 1:896789dcc911 386 led1 = 0;
joeroop 1:896789dcc911 387 break;
joeroop 1:896789dcc911 388 default:
joeroop 1:896789dcc911 389 //Thread::wait(2000); if wait can miss signal
joeroop 1:896789dcc911 390 break;
joeroop 1:896789dcc911 391 }
joeroop 1:896789dcc911 392 }
joeroop 1:896789dcc911 393 }
joeroop 2:324dc8b89365 394