finished

Dependencies:   C12832 DebouncedInterrupt MMA7660 mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
cathal66
Date:
Thu Feb 26 15:00:42 2015 +0000
Child:
1:57407e283b03
Commit message:
fixed problem with push button

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
LM75B.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Thu Feb 26 15:00:42 2015 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/chris/code/C12832/#7de323fa46fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LM75B.lib	Thu Feb 26 15:00:42 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/neilt6/code/LM75B/#fc27dc535ea9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Feb 26 15:00:42 2015 +0000
@@ -0,0 +1,244 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "C12832.h"
+
+//FINITE STATE MACHINE EVENTS
+#define NO_EVENT 0
+#define TIME_OUT 1
+#define BUTTON_PRESS 2
+
+//STATES
+#define STATE_0 0
+#define STATE_1 1
+#define STATE_2 2
+#define STATE_3 3
+#define STATE_4 4
+#define STATE_5 5
+
+//pass event via message queue
+typedef struct {
+    int    event;   /* AD result of measured voltage */
+} message_t;
+
+MemoryPool<message_t, 16> mpool;
+Queue<message_t, 16> queue;
+
+//button plus local display
+DigitalIn coin(p14);
+
+C12832 lcd(p5, p7, p6, p8, p11);
+
+//leds for debug
+DigitalOut led_R(p23); //LED RGB red
+DigitalOut led_G(p24); //LED RGB green
+
+DigitalOut led4(LED4); //LED RGB green
+DigitalOut led3(LED3); //LED RGB green
+
+    
+void timeout_event(void const *n) 
+{
+        //generate local display info
+        lcd.cls();
+        lcd.locate(40,5);
+        lcd.printf("timeout event");
+        
+       
+        //event via a message queue
+        message_t *message = mpool.alloc();
+        message->event = TIME_OUT; 
+        queue.put(message);
+        
+        led4 =  !led4;
+        
+}
+
+
+void button_event_thread(void const *argument) {
+    int button_press=0;
+    while (true) {
+     
+        //debouce delay for switch
+        
+        if (coin)
+            {
+                button_press = 1;
+            if (button_press == 1 & coin == 0)
+                {
+             
+                lcd.cls();    
+                lcd.locate(0,1);
+                lcd.printf("button event");    
+                    
+               
+                //event via a message queue
+                message_t *message = mpool.alloc();
+                message->event = BUTTON_PRESS; 
+                queue.put(message);
+                
+                led3 = !led3;
+                button_press = 0;
+                }
+            }
+        else 
+            {
+                //button_press = coin;
+                //Thread::wait(100);
+            }
+    }
+}
+
+        
+int main (void) {
+    
+//Thread fsm(fsm_thread); 
+Thread button_event(button_event_thread);
+RtosTimer timer(timeout_event, osTimerPeriodic, (void *)0);
+
+int state = STATE_0;
+
+ 
+    //start timer with a 2 sec timeout 
+    timer.start(2000); 
+    
+    while (true) {
+        switch(state)
+            {
+            case STATE_0:
+                lcd.cls();
+                lcd.locate(0,2);
+                lcd.printf("FSM START");
+                
+                osEvent evt = queue.get();
+                if (evt.status == osEventMessage) 
+                    {
+                    message_t *message = (message_t*)evt.value.p;
+                
+                       
+                    if(message->event == BUTTON_PRESS) state = STATE_1;
+                    if(message->event == TIME_OUT) state = STATE_0;
+                
+                    mpool.free(message);
+                    }
+                
+                timer.start(2000);
+            
+            break;
+            
+            case STATE_1:
+                lcd.cls();
+                lcd.locate(0,2);
+                lcd.printf("FSM COUNTER  1"); 
+                
+                evt = queue.get();
+                if (evt.status == osEventMessage) 
+                    {
+                    message_t *message = (message_t*)evt.value.p;
+                
+                       
+                    if(message->event == BUTTON_PRESS) state = STATE_2;
+                    if(message->event == TIME_OUT) state = STATE_0;
+                
+                    mpool.free(message);
+                    }
+                 
+             
+                timer.start(2000);
+            
+            break;
+            
+            case STATE_2:
+                lcd.cls();
+                lcd.locate(0,2);
+                lcd.printf("FSM COUNTER  2"); 
+
+               evt = queue.get();
+               if (evt.status == osEventMessage) 
+                    {
+                    message_t *message = (message_t*)evt.value.p;
+                
+                       
+                    if(message->event == BUTTON_PRESS) state = STATE_3;
+                    if(message->event == TIME_OUT) state = STATE_1;
+                
+                    mpool.free(message);
+                    }
+
+                timer.start(2000);
+            
+            break;          
+            
+            case STATE_3:
+                lcd.cls();
+                lcd.locate(0,2);
+                lcd.printf("FSM COUNTER  3"); 
+                
+                evt = queue.get();
+               if (evt.status == osEventMessage) 
+                    {
+                    message_t *message = (message_t*)evt.value.p;
+                
+                       
+                    if(message->event == BUTTON_PRESS) state = STATE_4;
+                    if(message->event == TIME_OUT) state = STATE_2;
+                
+                    mpool.free(message);
+                    }
+                 
+               
+                timer.start(2000);
+            
+            break;    
+            
+            case STATE_4:
+                lcd.cls();
+                lcd.locate(0,2);
+                lcd.printf("FSM COUNTER  4"); 
+                
+                evt = queue.get();
+                if (evt.status == osEventMessage) 
+                    {
+                    message_t *message = (message_t*)evt.value.p;
+                
+                       
+                    if(message->event == BUTTON_PRESS) state = STATE_5;
+                    if(message->event == TIME_OUT) state = STATE_3;
+                
+                    mpool.free(message);
+                    }
+    
+                timer.start(2000);
+            
+            break;    
+            
+            case STATE_5:
+                lcd.cls();
+                lcd.locate(0,2);
+                lcd.printf("FSM COUNTER  5"); 
+                
+                evt = queue.get();
+                if (evt.status == osEventMessage) 
+                    {
+                    message_t *message = (message_t*)evt.value.p;
+                
+                       
+                    if(message->event == BUTTON_PRESS) state = STATE_5;
+                    if(message->event == TIME_OUT) state = STATE_4;
+                
+                    mpool.free(message);
+                    }
+                 
+
+                
+                timer.start(2000);
+            
+            break;  
+        }//End of switch
+        
+    //toggle led for local testing    
+    //led2= !led2;
+                                       
+    }//end of while(1)
+    
+    
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Thu Feb 26 15:00:42 2015 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed-rtos/#5448826aa700
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Feb 26 15:00:42 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9ad691361fac
\ No newline at end of file