done pool

Dependencies:   C12832 mbed-rtos mbed

Fork of Case_study_rtos_queue by cathal deehy-power

Revision:
6:6cdc2d2e804b
Parent:
3:c490e2d69dd8
--- a/main.cpp	Fri Feb 13 00:40:13 2015 +0000
+++ b/main.cpp	Fri Feb 13 13:34:51 2015 +0000
@@ -1,41 +1,144 @@
 #include "mbed.h"
 #include "rtos.h"
+#include "C12832.h"                                     // Include the LCD header files 
 
-typedef struct {
-    float    voltage;   /* AD result of measured voltage */
-    float    current;   /* AD result of measured current */
-    uint32_t counter;   /* A counter value               */
-} message_t;
+C12832 lcd(p5, p7, p6, p8, p11);                        //Initialise LCD
+
+DigitalIn Up(p15);                                      //Initialise Joystick up
+DigitalIn Down(p12);                                    //Initialise Joystick down
+DigitalIn Left(p13);                                    //Initialise Joystick left
+DigitalIn Right(p16);                                   //Initialise Joystick right
+
+
+AnalogIn Pot1(p19);                                     //Initialise Pot1 to be an analog input
+AnalogIn Pot2(p20);                                     //Initialise Pot2 to be an analog input
+
+PwmOut LED_1(p25);                                      //Initialise Blue
+PwmOut LED_2(p24);                                      //Initialise Green
+PwmOut LED_3(p23);                                      //Initialise Red
+
+PwmOut spkr(p26);                                       //Initialise PWM to speaker
 
-MemoryPool<message_t, 16> mpool;
-Queue<message_t, 16> queue;
+typedef struct                                          //Initialise Sturture
+{
+    float   Joystick;                                   //Set Joystick as a float
+    float   Light;                                      //Set Light as a float
+    float   Pot1_Value;                                 //Initialise Red
+    float   Pot2_Value;                                 //Initialise Red
+
+} message_t;                                            //Sturecture name "message_t"
+
+
+
+MemoryPool<message_t, 16> mpool;                        //Allocate a Mpool of value 16
+Queue<message_t, 16> queue;                             //Allocate a Queue of value 16
+
+
+void Send (void const *args)                            //Setup the thread function
+{
 
-/* Send Thread */
-void send_thread (void const *args) {
-    uint32_t i = 0;
-    while (true) {
-        i++; // fake data update
+    while (true)                                        //Super loop
+    {
+        if (Up == 1)                                    //When Joystick is a value of 1 (Pushed up)
+        {
+        message_t *message = mpool.alloc();             //allocate memory 
+        message->Joystick = 1;                          //Set message will be the Joystick Value 1
+        message->Light = 1;                             //The message will be the Light Value 1
+        message->Pot1_Value = Pot1;                     //Read Pot1 and store in message->Pot1_Value
+        message->Pot2_Value = Pot2;                     //Read Pot2 and store in message->Pot2_Value
+        queue.put(message);                             //Place it in the Queue
+        Thread::wait(500);                              //Thread wait for 500 msec
+         }   
+         
+        else if (Down == 1)                                     //When Joystick is a value of 1 (Pushed up)
+        {
         message_t *message = mpool.alloc();
-        message->voltage = (i * 0.1) * 33; 
-        message->current = (i * 0.1) * 11;
-        message->counter = i;
-        queue.put(message);
-        Thread::wait(1000);
+        message->Joystick = 2;                          //Set message will be the Joystick Value 2
+        message->Light = 2;                             //The message will be the Light Value 2
+        message->Pot1_Value = Pot1;                     //Read Pot1 and store in message->Pot1_Value
+        message->Pot2_Value = Pot2;                     //Read Pot2 and store in message->Pot2_Value
+        queue.put(message);                             //Place it in the Queue
+        Thread::wait(500);                              //Thread wait for 500 msec
+        }  
+          
+        else if (Left == 1)                             //When Joystick is a value of 1 (Pushed up)
+        {
+        message_t *message = mpool.alloc();
+        message->Joystick = 4;                          //Set message will be the Joystick Value 4
+        message->Light = 3;                             //The message will be the Light Value 3
+        message->Pot1_Value = Pot1;                     //Read Pot1 and store in message->Pot1_Value
+        message->Pot2_Value = Pot2;                     //Read Pot2 and store in message->Pot2_Value
+        queue.put(message);                             //Place it in the Queue
+        Thread::wait(500);                              //Thread wait for 500 msec 
+        }
+            
+        else if (Right == 1)                            //When Joystick is a value of 1 (Pushed up)
+        {
+        message_t *message = mpool.alloc();
+        message->Joystick = 3;                          //Set message will be the Joystick Value 3
+        message->Light = 4;                             //The message will be the Light Value 4
+        message->Pot1_Value = Pot1;                     //Read Pot1 and store in message->Pot1_Value
+        message->Pot2_Value = Pot2;                     //Read Pot2 and store in message->Pot2_Value      
+        queue.put(message);                             //Place it in the Queue
+        Thread::wait(500);                              //Thread wait for 500 msec  
+        }
+
+
     }
 }
 
-int main (void) {
-    Thread thread(send_thread);
+int main (void) 
+{
+    LED_1 = 1;                                          //Turn off R
+    LED_2 = 1;                                          //Turn off B
+    LED_3 = 1;                                          //Turn off G
+    
+    Thread thread(Send);                                //Start up tread for send
+
     
-    while (true) {
-        osEvent evt = queue.get();
-        if (evt.status == osEventMessage) {
-            message_t *message = (message_t*)evt.value.p;
-            printf("\nVoltage: %.2f V\n\r"   , message->voltage);
-            printf("Current: %.2f A\n\r"     , message->current);
-            printf("Number of cycles: %u\n\r", message->counter);
+    while (true) 
+    {
+        osEvent evt = queue.get();                      //Get next queue
+        if (evt.status == osEventMessage)               
+        {
+            message_t *message = (message_t*)evt.value.p;                           //ppinter in the queue
+            lcd.cls();                                                              // clear screen of the lcd
+            lcd.locate(0,3);                                                        //set location on the LCD
+            lcd.printf("Joystick Value: %.2f \n\r"   , message->Joystick);          //display joystick value on LCD
+            lcd.printf("Light Value: %.2f \n\r"     , message->Light);              //display Light value on LCD
+            lcd.printf("Pot1:%.2f Pot2:%.4f\n\r"     , message->Pot1_Value, message->Pot2_Value);   //display Pot1 & Pot2 value on LCD
+            
             
-            mpool.free(message);
+            if (message->Light == 1)                    // When message is value 1 display Light sequence
+            {
+             LED_1 = message->Pot1_Value;               // dim the Blue LED with the value in pot1
+             LED_2 = 1;                                 //Turn off LED
+             LED_3 = 1;                                 //Turn off LED
+             spkr = message->Pot2_Value;                // dim the Blue LED with the value in pot1
+            }
+            else if (message->Light == 2)
+            {
+             LED_1 = 1;                                 //Turn off LED
+             LED_2 = message->Pot1_Value;               // dim the Green LED with the value in pot1
+             LED_3 = 1;                                 //Turn off LED
+             spkr = message->Pot2_Value;                // dim the Blue LED with the value in pot1
+            }
+            else if (message->Light == 3)
+            {
+             LED_1 = 1;                                 //Turn off LED
+             LED_2 = 1;                                 //Turn off LED
+             LED_3 = message->Pot1_Value;               // dim the Red LED with the value in pot1
+             spkr = message->Pot2_Value;
+            }            
+            else if (message->Light == 4)
+            {
+             LED_1 = message->Pot1_Value;               // dim the Blue LED with the value in pot1
+             LED_2 = message->Pot1_Value;               // dim the Green LED with the value in pot1
+             LED_3 = 1;                                 //Turn off LED
+             spkr = message->Pot2_Value;                // dim the Blue LED with the value in pot1
+            }
+            
+            mpool.free(message);                        // Frees up memory
         }
     }
-}
+}
\ No newline at end of file