Code with mutex and threads
Dependencies: C12832 Servo mbed-rtos-edited mbed
Fork of NervousPuppySprintOne by
nervousPuppy.cpp
- Committer:
- davidqpinho
- Date:
- 2015-02-26
- Revision:
- 8:921bd8c81549
- Parent:
- 7:8b2cf5e6e888
File content as of revision 8:921bd8c81549:
#include "nervousPuppy.h" /** * Constructor - contains running loop */ Servo tilt(p21); Servo rotate(p22); AnalogIn ainLeft(p15); AnalogIn ainRight(p16); C12832 lcd(p5, p7, p6, p8, p11); void sensor1_thread(void const *args) { while (true) { s1_thread.lock(); x = 100*ainRight.read(); s1_thread.unlock(); } } void sensor2_thread(void const *args) { while (true) { s2_thread.lock(); y = 100*ainLeft.read(); s2_thread.unlock(); } } /*void lcd_thread(void const *args) { while (true) { //lcdmutex_thread.lock(); lcd.cls(); lcd.locate(0,3); lcd.printf("x = %f",x); lcd.printf(" y = %f",y); lcd.printf("rotating by ,%f",pos); //lcdmutex_thread.unlock(); } }*/ nervousPuppy::nervousPuppy(){ //rotation = 0; int pos = 1000; rotate.Enable(1000,20000); //activating threads Thread thr1(sensor1_thread); Thread thr2(sensor2_thread); //Thread thr3(lcd_thread); while(1){ lcd.cls(); lcd.locate(0,3); lcd.printf("x = %f",x); lcd.printf(" y = %f",y); if(y > 3.5 && x < 3.5){ lcd.printf("rotating by ,%f",pos); pos += 50; rotate.SetPosition(pos); }else if(x > 3.5 && y < 3.5){ lcd.printf("rotating by ,%f", pos); pos -= 50; rotate.SetPosition(pos); } } } int main(){ nervousPuppy(); }