done pool

Dependencies:   C12832 mbed-rtos mbed

Fork of Case_study_rtos_queue by cathal deehy-power

Files at this revision

API Documentation at this revision

Comitter:
cathal66
Date:
Fri Feb 13 13:34:51 2015 +0000
Parent:
5:019bf7052261
Commit message:
done

Changed in this revision

C12832.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
diff -r 019bf7052261 -r 6cdc2d2e804b C12832.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Fri Feb 13 13:34:51 2015 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/chris/code/C12832/#7de323fa46fe
diff -r 019bf7052261 -r 6cdc2d2e804b main.cpp
--- 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