Code with mutex and threads

Dependencies:   C12832 Servo mbed-rtos-edited mbed

Fork of NervousPuppySprintOne by Sprint One

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();
}