Code with mutex and threads
Dependencies: C12832 Servo mbed-rtos-edited mbed
Fork of NervousPuppySprintOne by
nervousPuppy.cpp@8:921bd8c81549, 2015-02-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |