Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832 mbed-rtos mbed
Fork of Case_study_rtos_queue by
Revision 6:6cdc2d2e804b, committed 2015-02-13
- 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
