updated codes lads

Dependencies:   C12832 Servo mbed-rtos mbed

Fork of rtos_basic_updated by WIT_EmbOS_Gr1

Committer:
Soldier7
Date:
Mon Feb 09 16:22:25 2015 +0000
Revision:
15:1e53fa116948
Parent:
13:aef2afe73bc6
Three threads, basic function without logic in control thread.; LCD shows in and out values.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
emilmont 1:491820ee784d 2 #include "rtos.h"
PaulF 7:c8e192e2c80c 3 #include "Servo.h"
Ali_taher 8:507111cc659c 4 #include "C12832.h"
PaulF 7:c8e192e2c80c 5 Servo s1(p21);
PaulF 7:c8e192e2c80c 6 Servo s2(p22);
Soldier7 12:c037139a5bc0 7
Soldier7 15:1e53fa116948 8 AnalogIn p1(p19); // Sonar sensor 1 17 for the sensor or 19 for the potential meter.
Soldier7 12:c037139a5bc0 9 //AnalogIn p2(p20); // Sonar sensor 2 (not used yet)
Soldier7 15:1e53fa116948 10 Mutex inData_mutex;
Soldier7 15:1e53fa116948 11 Mutex outData_mutex;
Ali_taher 9:f60eeadabcb0 12
Soldier7 12:c037139a5bc0 13 // Globel variables
Soldier7 15:1e53fa116948 14 float inData;
Soldier7 15:1e53fa116948 15 float outData;
Ali_taher 8:507111cc659c 16 C12832 lcd(p5, p7, p6, p8, p11);// lcd is an object from class c12832 initialised by p5,p7....
Soldier7 12:c037139a5bc0 17
Soldier7 12:c037139a5bc0 18 /* Thread Sonar - handles the input data from the sonar sensor, and display on the LCD screen.
Soldier7 15:1e53fa116948 19 @update inData */
Soldier7 15:1e53fa116948 20 void sonar_thread(void const *args) {
Ali_taher 9:f60eeadabcb0 21 while (true) {
Soldier7 15:1e53fa116948 22 inData_mutex.lock();
Soldier7 15:1e53fa116948 23 inData = p1.read();
Soldier7 15:1e53fa116948 24 inData_mutex.unlock();
Soldier7 12:c037139a5bc0 25 Thread::wait(25);
Ali_taher 9:f60eeadabcb0 26 }
Ali_taher 9:f60eeadabcb0 27 }
Soldier7 12:c037139a5bc0 28
Soldier7 15:1e53fa116948 29 /* Thread Control -
Soldier7 15:1e53fa116948 30 @update outData */
Soldier7 15:1e53fa116948 31 void control_thread(void const *args) {
emilmont 1:491820ee784d 32 while (true) {
Soldier7 15:1e53fa116948 33 inData_mutex.lock();
Soldier7 15:1e53fa116948 34 outData_mutex.lock();
Soldier7 15:1e53fa116948 35 // The servo works from 0 to 1 volt and in approx 110 degree
Soldier7 15:1e53fa116948 36 float voltage = inData; // local variable to play with
Soldier7 15:1e53fa116948 37 // Logic code comes here
Soldier7 15:1e53fa116948 38
Soldier7 15:1e53fa116948 39 outData = voltage; // Update output_data global variable
Soldier7 15:1e53fa116948 40 // Display values on the LCD screen
Soldier7 15:1e53fa116948 41 lcd.cls(); // clear the display
Soldier7 15:1e53fa116948 42 lcd.locate(0,3);// the location where you want your charater to be displayed
Soldier7 15:1e53fa116948 43 lcd.printf("In: %f, Out: %f", inData, outData);
Soldier7 12:c037139a5bc0 44 // Handles the thread
Soldier7 15:1e53fa116948 45 inData_mutex.unlock();
Soldier7 15:1e53fa116948 46 outData_mutex.unlock();
Soldier7 12:c037139a5bc0 47 Thread::wait(20);
emilmont 1:491820ee784d 48 }
emilmont 1:491820ee784d 49 }
Soldier7 12:c037139a5bc0 50
Soldier7 15:1e53fa116948 51 /* Thread Servo - handles the output data from the control thread, and pass to the servo.
Soldier7 15:1e53fa116948 52 @update s1, s2 */
Soldier7 15:1e53fa116948 53 void servo_thread(void const *args) {
Soldier7 15:1e53fa116948 54 while (true) {
Soldier7 15:1e53fa116948 55 outData_mutex.lock();
Soldier7 15:1e53fa116948 56 s1 = outData;
Soldier7 15:1e53fa116948 57 s2 = outData;
Soldier7 15:1e53fa116948 58 outData_mutex.unlock();
Soldier7 15:1e53fa116948 59 Thread::wait(25);
Soldier7 15:1e53fa116948 60 }
Soldier7 15:1e53fa116948 61 }
Soldier7 15:1e53fa116948 62
Soldier7 12:c037139a5bc0 63 /* Main method - Start threads and delay them by waiting. */
Soldier7 12:c037139a5bc0 64 int main()
Soldier7 12:c037139a5bc0 65 {
Soldier7 15:1e53fa116948 66 Thread thread_1(sonar_thread); // Start Sonar Thread
Soldier7 15:1e53fa116948 67 Thread thread_2(control_thread); // Start Control Thread
Soldier7 15:1e53fa116948 68 Thread thread_3(servo_thread); // Start Servo Thread
Soldier7 12:c037139a5bc0 69 // Delay the threads
emilmont 1:491820ee784d 70 while (true) {
Ali_taher 9:f60eeadabcb0 71 Thread::wait(10);
emilmont 1:491820ee784d 72 }
emilmont 1:491820ee784d 73 }