updated codes lads
Dependencies: C12832 Servo mbed-rtos mbed
Fork of rtos_basic_updated by
main.cpp@15:1e53fa116948, 2015-02-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |