fsm

Dependencies:   C12832 LM75B MMA7660

Committer:
jasonberry
Date:
Sun Oct 11 22:48:58 2020 +0000
Revision:
0:e516e94e1c63
version 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jasonberry 0:e516e94e1c63 1 #include "mbed.h"
jasonberry 0:e516e94e1c63 2 #include "rtos.h"
jasonberry 0:e516e94e1c63 3 #include "C12832.h"
jasonberry 0:e516e94e1c63 4 #include "MMA7660.h"
jasonberry 0:e516e94e1c63 5
jasonberry 0:e516e94e1c63 6 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 7 #include "LM75B.h"
jasonberry 0:e516e94e1c63 8
jasonberry 0:e516e94e1c63 9
jasonberry 0:e516e94e1c63 10
jasonberry 0:e516e94e1c63 11 //FINITE STATE MACHINE EVENTS
jasonberry 0:e516e94e1c63 12 #define NO_EVENT 0
jasonberry 0:e516e94e1c63 13 #define TIME_OUT 1
jasonberry 0:e516e94e1c63 14 #define BUTTON_PRESS 2
jasonberry 0:e516e94e1c63 15 #define TILT 3
jasonberry 0:e516e94e1c63 16 #define PUSH 4
jasonberry 0:e516e94e1c63 17
jasonberry 0:e516e94e1c63 18 //##jtb001: timeout 10secs on enter
jasonberry 0:e516e94e1c63 19 #define TIME_OUT_10 5
jasonberry 0:e516e94e1c63 20
jasonberry 0:e516e94e1c63 21 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 22 #define TEMPERATURE_HIGH 6
jasonberry 0:e516e94e1c63 23 #define TEMPERATURE_LOW 7
jasonberry 0:e516e94e1c63 24
jasonberry 0:e516e94e1c63 25
jasonberry 0:e516e94e1c63 26 //STATES
jasonberry 0:e516e94e1c63 27 #define STATE_0 0
jasonberry 0:e516e94e1c63 28 #define STATE_1 1
jasonberry 0:e516e94e1c63 29 #define STATE_2 2
jasonberry 0:e516e94e1c63 30 #define STATE_3 3
jasonberry 0:e516e94e1c63 31 #define STATE_4 4
jasonberry 0:e516e94e1c63 32 #define STATE_5 5
jasonberry 0:e516e94e1c63 33 #define STATE_6 6
jasonberry 0:e516e94e1c63 34
jasonberry 0:e516e94e1c63 35
jasonberry 0:e516e94e1c63 36 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 37 #define TEMPERAURE_SETPOINT 29
jasonberry 0:e516e94e1c63 38
jasonberry 0:e516e94e1c63 39
jasonberry 0:e516e94e1c63 40 //Mutex
jasonberry 0:e516e94e1c63 41 Mutex LED_RGB;
jasonberry 0:e516e94e1c63 42 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 43 Mutex LCD_MUTEX;
jasonberry 0:e516e94e1c63 44
jasonberry 0:e516e94e1c63 45
jasonberry 0:e516e94e1c63 46
jasonberry 0:e516e94e1c63 47 //pass event via message queue
jasonberry 0:e516e94e1c63 48 typedef struct {
jasonberry 0:e516e94e1c63 49 int event; /* AD result of measured voltage */
jasonberry 0:e516e94e1c63 50 } message_t;
jasonberry 0:e516e94e1c63 51
jasonberry 0:e516e94e1c63 52 MemoryPool<message_t, 16> mpool;
jasonberry 0:e516e94e1c63 53 Queue<message_t, 16> queue;
jasonberry 0:e516e94e1c63 54
jasonberry 0:e516e94e1c63 55 //Digital input
jasonberry 0:e516e94e1c63 56 //DigitalIn coin(p14);
jasonberry 0:e516e94e1c63 57 InterruptIn button(p14);
jasonberry 0:e516e94e1c63 58
jasonberry 0:e516e94e1c63 59 //Analog input
jasonberry 0:e516e94e1c63 60 AnalogIn push(p19);
jasonberry 0:e516e94e1c63 61
jasonberry 0:e516e94e1c63 62 //Setup hardware
jasonberry 0:e516e94e1c63 63 MMA7660 MMA(p28, p27);
jasonberry 0:e516e94e1c63 64 C12832 lcd(p5, p7, p6, p8, p11);
jasonberry 0:e516e94e1c63 65
jasonberry 0:e516e94e1c63 66 //RGB LEDs
jasonberry 0:e516e94e1c63 67 DigitalOut led_R(p23); //LED RGB red
jasonberry 0:e516e94e1c63 68 DigitalOut led_G(p24); //LED RGB green
jasonberry 0:e516e94e1c63 69 DigitalOut led_B(p25); //LED RGB Blue
jasonberry 0:e516e94e1c63 70
jasonberry 0:e516e94e1c63 71 //leds for debug
jasonberry 0:e516e94e1c63 72 DigitalOut led4(LED4); //LED
jasonberry 0:e516e94e1c63 73 DigitalOut led3(LED3); //LED
jasonberry 0:e516e94e1c63 74 DigitalOut led2(LED2); //LED
jasonberry 0:e516e94e1c63 75
jasonberry 0:e516e94e1c63 76 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 77 LM75B sensor(p28,p27);
jasonberry 0:e516e94e1c63 78
jasonberry 0:e516e94e1c63 79 //Global varible
jasonberry 0:e516e94e1c63 80 int button_press=0;
jasonberry 0:e516e94e1c63 81
jasonberry 0:e516e94e1c63 82
jasonberry 0:e516e94e1c63 83 void timeout_event(void const *n)
jasonberry 0:e516e94e1c63 84 {
jasonberry 0:e516e94e1c63 85
jasonberry 0:e516e94e1c63 86 //event via a message queue
jasonberry 0:e516e94e1c63 87 message_t *message = mpool.alloc();
jasonberry 0:e516e94e1c63 88 message->event = TIME_OUT;
jasonberry 0:e516e94e1c63 89 queue.put(message);
jasonberry 0:e516e94e1c63 90
jasonberry 0:e516e94e1c63 91 led4 = !led4;
jasonberry 0:e516e94e1c63 92
jasonberry 0:e516e94e1c63 93 }
jasonberry 0:e516e94e1c63 94
jasonberry 0:e516e94e1c63 95 //##jtb001: timeout 10secs on enter
jasonberry 0:e516e94e1c63 96 void timeout_event_10(void const *n)
jasonberry 0:e516e94e1c63 97 {
jasonberry 0:e516e94e1c63 98
jasonberry 0:e516e94e1c63 99 //event via a message queue
jasonberry 0:e516e94e1c63 100 message_t *message = mpool.alloc();
jasonberry 0:e516e94e1c63 101 message->event = TIME_OUT_10;
jasonberry 0:e516e94e1c63 102 queue.put(message);
jasonberry 0:e516e94e1c63 103
jasonberry 0:e516e94e1c63 104 led3 = !led3;
jasonberry 0:e516e94e1c63 105
jasonberry 0:e516e94e1c63 106 }
jasonberry 0:e516e94e1c63 107
jasonberry 0:e516e94e1c63 108
jasonberry 0:e516e94e1c63 109 void button_event_thread(void const *argument) {
jasonberry 0:e516e94e1c63 110
jasonberry 0:e516e94e1c63 111 while (true) {
jasonberry 0:e516e94e1c63 112
jasonberry 0:e516e94e1c63 113 if (button_press == 1)
jasonberry 0:e516e94e1c63 114 {
jasonberry 0:e516e94e1c63 115
jasonberry 0:e516e94e1c63 116 //event via a message queue
jasonberry 0:e516e94e1c63 117 message_t *message = mpool.alloc();
jasonberry 0:e516e94e1c63 118 message->event = BUTTON_PRESS;
jasonberry 0:e516e94e1c63 119 queue.put(message);
jasonberry 0:e516e94e1c63 120
jasonberry 0:e516e94e1c63 121 led3 = !led3;
jasonberry 0:e516e94e1c63 122 button_press = 0;
jasonberry 0:e516e94e1c63 123 Thread::wait(500);
jasonberry 0:e516e94e1c63 124 }
jasonberry 0:e516e94e1c63 125
jasonberry 0:e516e94e1c63 126
jasonberry 0:e516e94e1c63 127
jasonberry 0:e516e94e1c63 128 }
jasonberry 0:e516e94e1c63 129 }
jasonberry 0:e516e94e1c63 130
jasonberry 0:e516e94e1c63 131
jasonberry 0:e516e94e1c63 132 void tilt_event_thread(void const *argument) {
jasonberry 0:e516e94e1c63 133 float tilt_value_Y = MMA.y();
jasonberry 0:e516e94e1c63 134 float tilt_value_X = MMA.x();
jasonberry 0:e516e94e1c63 135 while (true)
jasonberry 0:e516e94e1c63 136 {
jasonberry 0:e516e94e1c63 137
jasonberry 0:e516e94e1c63 138 //debouce delay for switch
jasonberry 0:e516e94e1c63 139
jasonberry 0:e516e94e1c63 140
jasonberry 0:e516e94e1c63 141 if (tilt_value_Y <= MMA.y()-0.2 ^ tilt_value_Y >= MMA.y()+0.2 )
jasonberry 0:e516e94e1c63 142 {
jasonberry 0:e516e94e1c63 143
jasonberry 0:e516e94e1c63 144 //event via a message queue
jasonberry 0:e516e94e1c63 145 message_t *message = mpool.alloc();
jasonberry 0:e516e94e1c63 146 message->event = TILT;
jasonberry 0:e516e94e1c63 147 queue.put(message);
jasonberry 0:e516e94e1c63 148
jasonberry 0:e516e94e1c63 149 led3 = !led3;
jasonberry 0:e516e94e1c63 150 Thread::wait(1500);
jasonberry 0:e516e94e1c63 151 tilt_value_Y = MMA.y();
jasonberry 0:e516e94e1c63 152 }
jasonberry 0:e516e94e1c63 153
jasonberry 0:e516e94e1c63 154
jasonberry 0:e516e94e1c63 155 }
jasonberry 0:e516e94e1c63 156
jasonberry 0:e516e94e1c63 157
jasonberry 0:e516e94e1c63 158 }
jasonberry 0:e516e94e1c63 159
jasonberry 0:e516e94e1c63 160
jasonberry 0:e516e94e1c63 161 void push_event_thread(void const *argument) {
jasonberry 0:e516e94e1c63 162 float push_value = push.read();
jasonberry 0:e516e94e1c63 163 while (true)
jasonberry 0:e516e94e1c63 164 {
jasonberry 0:e516e94e1c63 165
jasonberry 0:e516e94e1c63 166 //debouce delay for switch
jasonberry 0:e516e94e1c63 167
jasonberry 0:e516e94e1c63 168 if (push_value >= push.read()- 0.15 ^ push_value <= push.read()+ 0.15 )
jasonberry 0:e516e94e1c63 169 {
jasonberry 0:e516e94e1c63 170 //event via a message queue
jasonberry 0:e516e94e1c63 171 message_t *message = mpool.alloc();
jasonberry 0:e516e94e1c63 172 message->event = PUSH;
jasonberry 0:e516e94e1c63 173 queue.put(message);
jasonberry 0:e516e94e1c63 174 led3 = !led3;
jasonberry 0:e516e94e1c63 175 Thread::wait(1000);
jasonberry 0:e516e94e1c63 176 push_value = push.read();
jasonberry 0:e516e94e1c63 177 }
jasonberry 0:e516e94e1c63 178 }
jasonberry 0:e516e94e1c63 179
jasonberry 0:e516e94e1c63 180
jasonberry 0:e516e94e1c63 181 }
jasonberry 0:e516e94e1c63 182
jasonberry 0:e516e94e1c63 183 void flash_led_thread(void const *argument) {
jasonberry 0:e516e94e1c63 184 while (true)
jasonberry 0:e516e94e1c63 185 {
jasonberry 0:e516e94e1c63 186 Thread::signal_wait(0x1);
jasonberry 0:e516e94e1c63 187
jasonberry 0:e516e94e1c63 188 LED_RGB.lock();
jasonberry 0:e516e94e1c63 189 led_R=0;
jasonberry 0:e516e94e1c63 190 led_G=1;
jasonberry 0:e516e94e1c63 191 for (int i=0;i<=20;i++)
jasonberry 0:e516e94e1c63 192 {
jasonberry 0:e516e94e1c63 193 //LED_RGB.lock();
jasonberry 0:e516e94e1c63 194 led_R = !led_R;
jasonberry 0:e516e94e1c63 195 //LED_RGB.unlock();
jasonberry 0:e516e94e1c63 196 Thread::wait(100);
jasonberry 0:e516e94e1c63 197 }
jasonberry 0:e516e94e1c63 198 //LED_RGB.lock();
jasonberry 0:e516e94e1c63 199 led_R = 1;
jasonberry 0:e516e94e1c63 200 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 201 }
jasonberry 0:e516e94e1c63 202
jasonberry 0:e516e94e1c63 203 }
jasonberry 0:e516e94e1c63 204
jasonberry 0:e516e94e1c63 205
jasonberry 0:e516e94e1c63 206
jasonberry 0:e516e94e1c63 207 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 208 void temperature_event_thread(void const *argument) {
jasonberry 0:e516e94e1c63 209 int first_time_high = true;
jasonberry 0:e516e94e1c63 210 int first_time_low = true;
jasonberry 0:e516e94e1c63 211
jasonberry 0:e516e94e1c63 212 while (1)
jasonberry 0:e516e94e1c63 213 {
jasonberry 0:e516e94e1c63 214
jasonberry 0:e516e94e1c63 215 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 216 lcd.locate(0,10);
jasonberry 0:e516e94e1c63 217 lcd.printf("Temp = %.3f\n", sensor.read());
jasonberry 0:e516e94e1c63 218 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 219
jasonberry 0:e516e94e1c63 220
jasonberry 0:e516e94e1c63 221 if ((sensor.read() > TEMPERAURE_SETPOINT) && first_time_high == true )
jasonberry 0:e516e94e1c63 222 {
jasonberry 0:e516e94e1c63 223 //event via a message queue
jasonberry 0:e516e94e1c63 224 message_t *message = mpool.alloc();
jasonberry 0:e516e94e1c63 225 message->event = TEMPERATURE_HIGH;
jasonberry 0:e516e94e1c63 226 queue.put(message);
jasonberry 0:e516e94e1c63 227 led3 = !led3;
jasonberry 0:e516e94e1c63 228 first_time_high = false; //latch
jasonberry 0:e516e94e1c63 229 first_time_low = true; //latch
jasonberry 0:e516e94e1c63 230 //Thread::wait(1000);
jasonberry 0:e516e94e1c63 231 }
jasonberry 0:e516e94e1c63 232 else if ((sensor.read() < TEMPERAURE_SETPOINT) && first_time_low == true )
jasonberry 0:e516e94e1c63 233 {
jasonberry 0:e516e94e1c63 234 //event via a message queue
jasonberry 0:e516e94e1c63 235 message_t *message = mpool.alloc();
jasonberry 0:e516e94e1c63 236 message->event = TEMPERATURE_LOW;
jasonberry 0:e516e94e1c63 237 queue.put(message);
jasonberry 0:e516e94e1c63 238 led3 = !led3;
jasonberry 0:e516e94e1c63 239 first_time_high = true; //latch
jasonberry 0:e516e94e1c63 240 first_time_low = false; //latch
jasonberry 0:e516e94e1c63 241 //Thread::wait(1000);
jasonberry 0:e516e94e1c63 242
jasonberry 0:e516e94e1c63 243 }
jasonberry 0:e516e94e1c63 244 else
jasonberry 0:e516e94e1c63 245 {
jasonberry 0:e516e94e1c63 246 first_time_high = true; //latch
jasonberry 0:e516e94e1c63 247 first_time_low = true; //latch
jasonberry 0:e516e94e1c63 248 Thread::wait(1000);
jasonberry 0:e516e94e1c63 249 }
jasonberry 0:e516e94e1c63 250
jasonberry 0:e516e94e1c63 251
jasonberry 0:e516e94e1c63 252
jasonberry 0:e516e94e1c63 253 }//end of while
jasonberry 0:e516e94e1c63 254
jasonberry 0:e516e94e1c63 255 }
jasonberry 0:e516e94e1c63 256
jasonberry 0:e516e94e1c63 257 void Button_Inter() {
jasonberry 0:e516e94e1c63 258 //Flash_LED_Thread.signal_set(0x1);
jasonberry 0:e516e94e1c63 259
jasonberry 0:e516e94e1c63 260 button_press=1;
jasonberry 0:e516e94e1c63 261
jasonberry 0:e516e94e1c63 262 }
jasonberry 0:e516e94e1c63 263
jasonberry 0:e516e94e1c63 264 int main (void) {
jasonberry 0:e516e94e1c63 265
jasonberry 0:e516e94e1c63 266 //Thread fsm(fsm_thread);
jasonberry 0:e516e94e1c63 267 Thread button_event(button_event_thread);
jasonberry 0:e516e94e1c63 268 Thread tilt_event(tilt_event_thread);
jasonberry 0:e516e94e1c63 269 Thread push_event(push_event_thread);
jasonberry 0:e516e94e1c63 270 Thread Flash_LED_Thread(flash_led_thread);
jasonberry 0:e516e94e1c63 271
jasonberry 0:e516e94e1c63 272 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 273 Thread temperature_event(temperature_event_thread);
jasonberry 0:e516e94e1c63 274
jasonberry 0:e516e94e1c63 275 RtosTimer timer(timeout_event, osTimerPeriodic, (void *)0);
jasonberry 0:e516e94e1c63 276
jasonberry 0:e516e94e1c63 277 //##jtb001: timeout 10secs on enter
jasonberry 0:e516e94e1c63 278 RtosTimer timer_10(timeout_event_10, osTimerPeriodic, (void *)0);
jasonberry 0:e516e94e1c63 279
jasonberry 0:e516e94e1c63 280
jasonberry 0:e516e94e1c63 281 //Interrupts
jasonberry 0:e516e94e1c63 282 button.rise(&Button_Inter);
jasonberry 0:e516e94e1c63 283
jasonberry 0:e516e94e1c63 284 int state = STATE_0;
jasonberry 0:e516e94e1c63 285
jasonberry 0:e516e94e1c63 286 LED_RGB.lock();
jasonberry 0:e516e94e1c63 287 led_R=1;
jasonberry 0:e516e94e1c63 288 led_G=1;
jasonberry 0:e516e94e1c63 289 led_B=1;
jasonberry 0:e516e94e1c63 290 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 291
jasonberry 0:e516e94e1c63 292 if (MMA.testConnection()) //setup accler
jasonberry 0:e516e94e1c63 293
jasonberry 0:e516e94e1c63 294 //start timer with a 2 sec timeout
jasonberry 0:e516e94e1c63 295 timer.start(2000);
jasonberry 0:e516e94e1c63 296
jasonberry 0:e516e94e1c63 297
jasonberry 0:e516e94e1c63 298 //start up screen
jasonberry 0:e516e94e1c63 299 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 300 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 301 lcd.cls();
jasonberry 0:e516e94e1c63 302 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 303 lcd.printf("Insert Coin");
jasonberry 0:e516e94e1c63 304 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 305
jasonberry 0:e516e94e1c63 306 //lcd.locate(0,10);
jasonberry 0:e516e94e1c63 307 //lcd.printf("Temp = %.3f\n", sensor.read());
jasonberry 0:e516e94e1c63 308
jasonberry 0:e516e94e1c63 309 while (true) {
jasonberry 0:e516e94e1c63 310
jasonberry 0:e516e94e1c63 311
jasonberry 0:e516e94e1c63 312 switch(state)
jasonberry 0:e516e94e1c63 313 {
jasonberry 0:e516e94e1c63 314 case STATE_0:
jasonberry 0:e516e94e1c63 315 osEvent evt = queue.get();
jasonberry 0:e516e94e1c63 316 if (evt.status == osEventMessage)
jasonberry 0:e516e94e1c63 317 {
jasonberry 0:e516e94e1c63 318 message_t *message = (message_t*)evt.value.p;
jasonberry 0:e516e94e1c63 319
jasonberry 0:e516e94e1c63 320
jasonberry 0:e516e94e1c63 321 if(message->event == BUTTON_PRESS)
jasonberry 0:e516e94e1c63 322 {
jasonberry 0:e516e94e1c63 323 LED_RGB.lock();
jasonberry 0:e516e94e1c63 324 led_G=0; // on
jasonberry 0:e516e94e1c63 325 led_R=1; // off
jasonberry 0:e516e94e1c63 326 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 327
jasonberry 0:e516e94e1c63 328 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 329 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 330 lcd.cls();
jasonberry 0:e516e94e1c63 331 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 332 lcd.printf("Please Enter");
jasonberry 0:e516e94e1c63 333 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 334
jasonberry 0:e516e94e1c63 335 //##jtb001 start timer2 with a 10 sec timeout
jasonberry 0:e516e94e1c63 336 timer_10.start(10000);
jasonberry 0:e516e94e1c63 337
jasonberry 0:e516e94e1c63 338 state = STATE_1;
jasonberry 0:e516e94e1c63 339 }
jasonberry 0:e516e94e1c63 340
jasonberry 0:e516e94e1c63 341 if(message->event == TILT)
jasonberry 0:e516e94e1c63 342 {
jasonberry 0:e516e94e1c63 343 LED_RGB.lock();
jasonberry 0:e516e94e1c63 344 led_G=1;
jasonberry 0:e516e94e1c63 345 led_R=1;
jasonberry 0:e516e94e1c63 346 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 347
jasonberry 0:e516e94e1c63 348 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 349 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 350 lcd.cls();
jasonberry 0:e516e94e1c63 351 lcd.locate(0,0);
jasonberry 0:e516e94e1c63 352 lcd.printf("STOP");
jasonberry 0:e516e94e1c63 353 lcd.locate(0,10);
jasonberry 0:e516e94e1c63 354 lcd.printf("Please Insert Coin");
jasonberry 0:e516e94e1c63 355 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 356
jasonberry 0:e516e94e1c63 357 Flash_LED_Thread.signal_set(0x1);
jasonberry 0:e516e94e1c63 358 state = STATE_3;
jasonberry 0:e516e94e1c63 359 timer.start(2000);
jasonberry 0:e516e94e1c63 360 }
jasonberry 0:e516e94e1c63 361
jasonberry 0:e516e94e1c63 362 if(message->event == TEMPERATURE_HIGH)
jasonberry 0:e516e94e1c63 363 {
jasonberry 0:e516e94e1c63 364 LED_RGB.lock();
jasonberry 0:e516e94e1c63 365 led_G=0; // on
jasonberry 0:e516e94e1c63 366 led_R=0; // oN
jasonberry 0:e516e94e1c63 367 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 368
jasonberry 0:e516e94e1c63 369 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 370 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 371 lcd.cls();
jasonberry 0:e516e94e1c63 372 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 373 lcd.printf("Please Exit");
jasonberry 0:e516e94e1c63 374 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 375
jasonberry 0:e516e94e1c63 376 state = STATE_6;
jasonberry 0:e516e94e1c63 377 }
jasonberry 0:e516e94e1c63 378
jasonberry 0:e516e94e1c63 379 mpool.free(message);
jasonberry 0:e516e94e1c63 380 }
jasonberry 0:e516e94e1c63 381
jasonberry 0:e516e94e1c63 382
jasonberry 0:e516e94e1c63 383
jasonberry 0:e516e94e1c63 384 break;
jasonberry 0:e516e94e1c63 385
jasonberry 0:e516e94e1c63 386 case STATE_1:
jasonberry 0:e516e94e1c63 387
jasonberry 0:e516e94e1c63 388 evt = queue.get();
jasonberry 0:e516e94e1c63 389 if (evt.status == osEventMessage)
jasonberry 0:e516e94e1c63 390 {
jasonberry 0:e516e94e1c63 391 message_t *message = (message_t*)evt.value.p;
jasonberry 0:e516e94e1c63 392
jasonberry 0:e516e94e1c63 393
jasonberry 0:e516e94e1c63 394 if(message->event == TILT)
jasonberry 0:e516e94e1c63 395 {
jasonberry 0:e516e94e1c63 396 LED_RGB.lock();
jasonberry 0:e516e94e1c63 397 led_G=1;
jasonberry 0:e516e94e1c63 398 led_R=1;
jasonberry 0:e516e94e1c63 399 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 400
jasonberry 0:e516e94e1c63 401 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 402 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 403 lcd.cls();
jasonberry 0:e516e94e1c63 404 lcd.locate(0,0);
jasonberry 0:e516e94e1c63 405 lcd.printf("STOP");
jasonberry 0:e516e94e1c63 406 lcd.locate(0,10);
jasonberry 0:e516e94e1c63 407 lcd.printf("Please Enter");
jasonberry 0:e516e94e1c63 408 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 409
jasonberry 0:e516e94e1c63 410 Flash_LED_Thread.signal_set(0x1);
jasonberry 0:e516e94e1c63 411 state = STATE_4;
jasonberry 0:e516e94e1c63 412 timer.start(2000);
jasonberry 0:e516e94e1c63 413 }
jasonberry 0:e516e94e1c63 414 if(message->event == PUSH)
jasonberry 0:e516e94e1c63 415 {
jasonberry 0:e516e94e1c63 416 LED_RGB.lock();
jasonberry 0:e516e94e1c63 417 led_R=1;//off
jasonberry 0:e516e94e1c63 418 led_G=0;//on
jasonberry 0:e516e94e1c63 419 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 420
jasonberry 0:e516e94e1c63 421 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 422 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 423 lcd.cls();
jasonberry 0:e516e94e1c63 424 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 425 lcd.printf("Have a nice day");
jasonberry 0:e516e94e1c63 426 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 427 timer.start(2000);
jasonberry 0:e516e94e1c63 428 state = STATE_2;
jasonberry 0:e516e94e1c63 429 }
jasonberry 0:e516e94e1c63 430
jasonberry 0:e516e94e1c63 431 //##jtb001: timeout 10secs on enter
jasonberry 0:e516e94e1c63 432 if(message->event == TIME_OUT_10)
jasonberry 0:e516e94e1c63 433 {
jasonberry 0:e516e94e1c63 434 LED_RGB.lock();
jasonberry 0:e516e94e1c63 435 led_R=0;
jasonberry 0:e516e94e1c63 436 led_G=1;
jasonberry 0:e516e94e1c63 437 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 438
jasonberry 0:e516e94e1c63 439 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 440 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 441 lcd.cls();
jasonberry 0:e516e94e1c63 442 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 443 lcd.printf("Insert Coin");
jasonberry 0:e516e94e1c63 444 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 445 state = STATE_0;
jasonberry 0:e516e94e1c63 446 }
jasonberry 0:e516e94e1c63 447
jasonberry 0:e516e94e1c63 448 mpool.free(message);
jasonberry 0:e516e94e1c63 449 }
jasonberry 0:e516e94e1c63 450
jasonberry 0:e516e94e1c63 451
jasonberry 0:e516e94e1c63 452
jasonberry 0:e516e94e1c63 453
jasonberry 0:e516e94e1c63 454 break;
jasonberry 0:e516e94e1c63 455
jasonberry 0:e516e94e1c63 456 case STATE_2:
jasonberry 0:e516e94e1c63 457
jasonberry 0:e516e94e1c63 458 evt = queue.get();
jasonberry 0:e516e94e1c63 459 if (evt.status == osEventMessage)
jasonberry 0:e516e94e1c63 460 {
jasonberry 0:e516e94e1c63 461 message_t *message = (message_t*)evt.value.p;
jasonberry 0:e516e94e1c63 462
jasonberry 0:e516e94e1c63 463
jasonberry 0:e516e94e1c63 464 if(message->event == TILT)
jasonberry 0:e516e94e1c63 465 {
jasonberry 0:e516e94e1c63 466 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 467 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 468 lcd.cls();
jasonberry 0:e516e94e1c63 469 lcd.locate(0,0);
jasonberry 0:e516e94e1c63 470 lcd.printf("STOP");
jasonberry 0:e516e94e1c63 471 lcd.locate(0,10);
jasonberry 0:e516e94e1c63 472 lcd.printf("Please Insert Coin");
jasonberry 0:e516e94e1c63 473 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 474
jasonberry 0:e516e94e1c63 475
jasonberry 0:e516e94e1c63 476 state = STATE_5;
jasonberry 0:e516e94e1c63 477 timer.start(2000);
jasonberry 0:e516e94e1c63 478 Flash_LED_Thread.signal_set(0x1);
jasonberry 0:e516e94e1c63 479 }
jasonberry 0:e516e94e1c63 480 if(message->event == TIME_OUT)
jasonberry 0:e516e94e1c63 481 {
jasonberry 0:e516e94e1c63 482 LED_RGB.lock();
jasonberry 0:e516e94e1c63 483 led_R=0;
jasonberry 0:e516e94e1c63 484 led_G=1;
jasonberry 0:e516e94e1c63 485 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 486
jasonberry 0:e516e94e1c63 487 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 488 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 489 lcd.cls();
jasonberry 0:e516e94e1c63 490 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 491 lcd.printf("Insert Coin");
jasonberry 0:e516e94e1c63 492 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 493 state = STATE_0;
jasonberry 0:e516e94e1c63 494
jasonberry 0:e516e94e1c63 495 }
jasonberry 0:e516e94e1c63 496 mpool.free(message);
jasonberry 0:e516e94e1c63 497 }
jasonberry 0:e516e94e1c63 498
jasonberry 0:e516e94e1c63 499
jasonberry 0:e516e94e1c63 500
jasonberry 0:e516e94e1c63 501 break;
jasonberry 0:e516e94e1c63 502
jasonberry 0:e516e94e1c63 503 case STATE_3:
jasonberry 0:e516e94e1c63 504
jasonberry 0:e516e94e1c63 505 evt = queue.get();
jasonberry 0:e516e94e1c63 506 if (evt.status == osEventMessage)
jasonberry 0:e516e94e1c63 507 {
jasonberry 0:e516e94e1c63 508 message_t *message = (message_t*)evt.value.p;
jasonberry 0:e516e94e1c63 509
jasonberry 0:e516e94e1c63 510
jasonberry 0:e516e94e1c63 511 if(message->event == TIME_OUT)
jasonberry 0:e516e94e1c63 512 {
jasonberry 0:e516e94e1c63 513 LED_RGB.lock();
jasonberry 0:e516e94e1c63 514 led_R=0;
jasonberry 0:e516e94e1c63 515 led_G=1;
jasonberry 0:e516e94e1c63 516 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 517
jasonberry 0:e516e94e1c63 518 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 519 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 520 lcd.cls();
jasonberry 0:e516e94e1c63 521 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 522 lcd.printf("Insert Coin");
jasonberry 0:e516e94e1c63 523 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 524
jasonberry 0:e516e94e1c63 525 state = STATE_0;
jasonberry 0:e516e94e1c63 526 timer.start(2000);
jasonberry 0:e516e94e1c63 527 }
jasonberry 0:e516e94e1c63 528 mpool.free(message);
jasonberry 0:e516e94e1c63 529 }
jasonberry 0:e516e94e1c63 530
jasonberry 0:e516e94e1c63 531
jasonberry 0:e516e94e1c63 532
jasonberry 0:e516e94e1c63 533 break;
jasonberry 0:e516e94e1c63 534
jasonberry 0:e516e94e1c63 535
jasonberry 0:e516e94e1c63 536 case STATE_4:
jasonberry 0:e516e94e1c63 537
jasonberry 0:e516e94e1c63 538 evt = queue.get();
jasonberry 0:e516e94e1c63 539 if (evt.status == osEventMessage)
jasonberry 0:e516e94e1c63 540 {
jasonberry 0:e516e94e1c63 541 message_t *message = (message_t*)evt.value.p;
jasonberry 0:e516e94e1c63 542
jasonberry 0:e516e94e1c63 543
jasonberry 0:e516e94e1c63 544 if(message->event == TIME_OUT)
jasonberry 0:e516e94e1c63 545 {
jasonberry 0:e516e94e1c63 546 LED_RGB.lock();
jasonberry 0:e516e94e1c63 547 led_R=1;
jasonberry 0:e516e94e1c63 548 led_G=0;
jasonberry 0:e516e94e1c63 549 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 550
jasonberry 0:e516e94e1c63 551 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 552 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 553 lcd.cls();
jasonberry 0:e516e94e1c63 554 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 555 lcd.printf("Please Enter");
jasonberry 0:e516e94e1c63 556 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 557
jasonberry 0:e516e94e1c63 558 state = STATE_1;
jasonberry 0:e516e94e1c63 559
jasonberry 0:e516e94e1c63 560 }
jasonberry 0:e516e94e1c63 561 mpool.free(message);
jasonberry 0:e516e94e1c63 562 }
jasonberry 0:e516e94e1c63 563
jasonberry 0:e516e94e1c63 564
jasonberry 0:e516e94e1c63 565
jasonberry 0:e516e94e1c63 566 break;
jasonberry 0:e516e94e1c63 567
jasonberry 0:e516e94e1c63 568 case STATE_5:
jasonberry 0:e516e94e1c63 569
jasonberry 0:e516e94e1c63 570 evt = queue.get();
jasonberry 0:e516e94e1c63 571 if (evt.status == osEventMessage)
jasonberry 0:e516e94e1c63 572 {
jasonberry 0:e516e94e1c63 573 message_t *message = (message_t*)evt.value.p;
jasonberry 0:e516e94e1c63 574
jasonberry 0:e516e94e1c63 575
jasonberry 0:e516e94e1c63 576 if(message->event == TIME_OUT)
jasonberry 0:e516e94e1c63 577 {
jasonberry 0:e516e94e1c63 578 LED_RGB.lock();
jasonberry 0:e516e94e1c63 579 led_R=1;
jasonberry 0:e516e94e1c63 580 led_G=0;
jasonberry 0:e516e94e1c63 581 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 582
jasonberry 0:e516e94e1c63 583 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 584 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 585 lcd.cls();
jasonberry 0:e516e94e1c63 586 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 587 lcd.printf("Have a nice day");
jasonberry 0:e516e94e1c63 588 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 589
jasonberry 0:e516e94e1c63 590 state = STATE_2;
jasonberry 0:e516e94e1c63 591 timer.start(2000);
jasonberry 0:e516e94e1c63 592 }
jasonberry 0:e516e94e1c63 593 mpool.free(message);
jasonberry 0:e516e94e1c63 594 }
jasonberry 0:e516e94e1c63 595
jasonberry 0:e516e94e1c63 596
jasonberry 0:e516e94e1c63 597
jasonberry 0:e516e94e1c63 598 break;
jasonberry 0:e516e94e1c63 599
jasonberry 0:e516e94e1c63 600 case STATE_6:
jasonberry 0:e516e94e1c63 601
jasonberry 0:e516e94e1c63 602 evt = queue.get();
jasonberry 0:e516e94e1c63 603 if (evt.status == osEventMessage)
jasonberry 0:e516e94e1c63 604 {
jasonberry 0:e516e94e1c63 605 message_t *message = (message_t*)evt.value.p;
jasonberry 0:e516e94e1c63 606
jasonberry 0:e516e94e1c63 607
jasonberry 0:e516e94e1c63 608 if(message->event == TEMPERATURE_LOW)
jasonberry 0:e516e94e1c63 609 {
jasonberry 0:e516e94e1c63 610 LED_RGB.lock();
jasonberry 0:e516e94e1c63 611 led_R=0;
jasonberry 0:e516e94e1c63 612 led_G=1;
jasonberry 0:e516e94e1c63 613 LED_RGB.unlock();
jasonberry 0:e516e94e1c63 614
jasonberry 0:e516e94e1c63 615 //#jtb#002 firedoor
jasonberry 0:e516e94e1c63 616 LCD_MUTEX.lock();
jasonberry 0:e516e94e1c63 617 lcd.cls();
jasonberry 0:e516e94e1c63 618 lcd.locate(0,2);
jasonberry 0:e516e94e1c63 619 lcd.printf("Insert Coin");
jasonberry 0:e516e94e1c63 620 LCD_MUTEX.unlock();
jasonberry 0:e516e94e1c63 621
jasonberry 0:e516e94e1c63 622 state = STATE_0;
jasonberry 0:e516e94e1c63 623
jasonberry 0:e516e94e1c63 624 }
jasonberry 0:e516e94e1c63 625 mpool.free(message);
jasonberry 0:e516e94e1c63 626 }
jasonberry 0:e516e94e1c63 627
jasonberry 0:e516e94e1c63 628
jasonberry 0:e516e94e1c63 629
jasonberry 0:e516e94e1c63 630 break;
jasonberry 0:e516e94e1c63 631 }//End of switch
jasonberry 0:e516e94e1c63 632
jasonberry 0:e516e94e1c63 633 //toggle led for local testing
jasonberry 0:e516e94e1c63 634 //led2= !led2;
jasonberry 0:e516e94e1c63 635
jasonberry 0:e516e94e1c63 636 }//end of while(1)
jasonberry 0:e516e94e1c63 637
jasonberry 0:e516e94e1c63 638
jasonberry 0:e516e94e1c63 639 }