Code with mutex and threads

Dependencies:   C12832 Servo mbed-rtos-edited mbed

Fork of NervousPuppySprintOne by Sprint One

Committer:
davidqpinho
Date:
Thu Feb 26 17:21:09 2015 +0000
Revision:
8:921bd8c81549
Parent:
7:8b2cf5e6e888
Version 26.02

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SeanDoyle 0:f71b200c2f4d 1 #include "nervousPuppy.h"
SeanDoyle 0:f71b200c2f4d 2
SeanDoyle 2:8415bea33a95 3 /**
SeanDoyle 2:8415bea33a95 4 * Constructor - contains running loop
SeanDoyle 2:8415bea33a95 5 */
SeanDoyle 4:2b47356f4b7d 6
SeanDoyle 4:2b47356f4b7d 7 Servo tilt(p21);
SeanDoyle 4:2b47356f4b7d 8 Servo rotate(p22);
SeanDoyle 6:f854aa2f41e2 9 AnalogIn ainLeft(p15);
SeanDoyle 6:f854aa2f41e2 10 AnalogIn ainRight(p16);
SeanDoyle 4:2b47356f4b7d 11
SeanDoyle 7:8b2cf5e6e888 12 C12832 lcd(p5, p7, p6, p8, p11);
SeanDoyle 4:2b47356f4b7d 13
davidqpinho 8:921bd8c81549 14 void sensor1_thread(void const *args) {
davidqpinho 8:921bd8c81549 15 while (true) {
davidqpinho 8:921bd8c81549 16 s1_thread.lock();
davidqpinho 8:921bd8c81549 17 x = 100*ainRight.read();
davidqpinho 8:921bd8c81549 18 s1_thread.unlock();
davidqpinho 8:921bd8c81549 19 }
davidqpinho 8:921bd8c81549 20 }
davidqpinho 8:921bd8c81549 21 void sensor2_thread(void const *args) {
davidqpinho 8:921bd8c81549 22 while (true) {
davidqpinho 8:921bd8c81549 23 s2_thread.lock();
davidqpinho 8:921bd8c81549 24 y = 100*ainLeft.read();
davidqpinho 8:921bd8c81549 25 s2_thread.unlock();
davidqpinho 8:921bd8c81549 26 }
davidqpinho 8:921bd8c81549 27 }
davidqpinho 8:921bd8c81549 28
davidqpinho 8:921bd8c81549 29 /*void lcd_thread(void const *args) {
davidqpinho 8:921bd8c81549 30 while (true) {
davidqpinho 8:921bd8c81549 31 //lcdmutex_thread.lock();
davidqpinho 8:921bd8c81549 32 lcd.cls();
davidqpinho 8:921bd8c81549 33 lcd.locate(0,3);
davidqpinho 8:921bd8c81549 34 lcd.printf("x = %f",x);
davidqpinho 8:921bd8c81549 35 lcd.printf(" y = %f",y);
davidqpinho 8:921bd8c81549 36 lcd.printf("rotating by ,%f",pos);
davidqpinho 8:921bd8c81549 37 //lcdmutex_thread.unlock();
davidqpinho 8:921bd8c81549 38 }
davidqpinho 8:921bd8c81549 39 }*/
davidqpinho 8:921bd8c81549 40
davidqpinho 8:921bd8c81549 41
SeanDoyle 4:2b47356f4b7d 42
SeanDoyle 0:f71b200c2f4d 43 nervousPuppy::nervousPuppy(){
davidqpinho 8:921bd8c81549 44 //rotation = 0;
SeanDoyle 7:8b2cf5e6e888 45 int pos = 1000;
davidqpinho 8:921bd8c81549 46
SeanDoyle 7:8b2cf5e6e888 47 rotate.Enable(1000,20000);
davidqpinho 8:921bd8c81549 48
davidqpinho 8:921bd8c81549 49 //activating threads
davidqpinho 8:921bd8c81549 50 Thread thr1(sensor1_thread);
davidqpinho 8:921bd8c81549 51 Thread thr2(sensor2_thread);
davidqpinho 8:921bd8c81549 52 //Thread thr3(lcd_thread);
davidqpinho 8:921bd8c81549 53
davidqpinho 8:921bd8c81549 54
SeanDoyle 6:f854aa2f41e2 55 while(1){
SeanDoyle 7:8b2cf5e6e888 56
davidqpinho 8:921bd8c81549 57
davidqpinho 8:921bd8c81549 58
SeanDoyle 6:f854aa2f41e2 59
SeanDoyle 4:2b47356f4b7d 60 lcd.cls();
SeanDoyle 6:f854aa2f41e2 61 lcd.locate(0,3);
SeanDoyle 6:f854aa2f41e2 62 lcd.printf("x = %f",x);
SeanDoyle 6:f854aa2f41e2 63 lcd.printf(" y = %f",y);
davidqpinho 8:921bd8c81549 64
SeanDoyle 6:f854aa2f41e2 65
SeanDoyle 7:8b2cf5e6e888 66 if(y > 3.5 && x < 3.5){
SeanDoyle 7:8b2cf5e6e888 67 lcd.printf("rotating by ,%f",pos);
SeanDoyle 7:8b2cf5e6e888 68 pos += 50;
SeanDoyle 7:8b2cf5e6e888 69 rotate.SetPosition(pos);
SeanDoyle 7:8b2cf5e6e888 70 }else if(x > 3.5 && y < 3.5){
SeanDoyle 7:8b2cf5e6e888 71 lcd.printf("rotating by ,%f", pos);
SeanDoyle 7:8b2cf5e6e888 72 pos -= 50;
SeanDoyle 7:8b2cf5e6e888 73 rotate.SetPosition(pos);
SeanDoyle 2:8415bea33a95 74 }
davidqpinho 8:921bd8c81549 75
SeanDoyle 1:8fe6802d6971 76 }
SeanDoyle 1:8fe6802d6971 77 }
SeanDoyle 1:8fe6802d6971 78
SeanDoyle 2:8415bea33a95 79
SeanDoyle 0:f71b200c2f4d 80
SeanDoyle 1:8fe6802d6971 81 int main(){
SeanDoyle 1:8fe6802d6971 82 nervousPuppy();
SeanDoyle 0:f71b200c2f4d 83 }