kao yi
/
Bov3
wu
Fork of CCC by
main.cpp
- Committer:
- backman
- Date:
- 2014-06-28
- Revision:
- 13:63f9a5101205
- Parent:
- 12:fdada4af384a
- Child:
- 14:2d90b0066fc6
File content as of revision 13:63f9a5101205:
#include "mbed.h" #include "rtos.h" #include "controller.h" #include "servo_api.h" #include "camera_api.h" #include "motor_api.h" #include "pot.h" #include "TSISensor.h" #define Debug_cam_uart #define L_eye #define R_eye #define motor_on #define Pcontroller #define task_ma_time #define t_cam 6 Serial pc(USBTX, USBRX); // tx, rx BX_servo servo; BX_camera cam(79); BX_motor MotorA('A'); BX_motor MotorB('B'); BX_pot pot1('1'); // 90/30=3 PID cam_to_M_ctrlr(10.0,118.0,0.059,0.105,0.105-0.059,0.00,0.02,10); DigitalOut task_pin(PTD1); TSISensor tsi; //os Mutex stdio_mutex; /* void led2_thread(void const *args) { while (true) { led2 = !led2; Thread::wait(1000); } } */ static int b_r_c=0; static int b_l_c=0; static int line3[3]; //special point static int l3_p=0; static double v_motor; static double v_servo; void cam_thread(void const *args){ while(true){ cam.read(); b_l_c=(double)cam.black_centerL(); if(l3_p==0){ line3[l3_p]=(double)cam.black_centerL(); }else if(l3_p==1){ line3[l3_p]=0; }else { line3[l3_p]=(double)cam.black_centerR(); } l3_p++; if(l3_p==3) l3_p=0; Thread::wait(t_cam); } } // function void de_thread(void const *args){ while(1){ stdio_mutex.lock(); #ifdef Debug_cam_uart #ifdef L_eye pc.printf("R: "); for(int i=128;i>=0;i--){ if(i==64) pc.printf("X"); else if(i<10) pc.printf("-"); else if(i>117) pc.printf("-"); else pc.printf("%c", cam.sign_line_imageL[i]); } pc.printf(" || "); #endif #ifdef R_eye pc.printf("R: "); for(int i=128;i>=0;i--){ if(i==64) pc.printf("X"); else if(i<10) pc.printf("-"); else if(i>117) pc.printf("-"); else pc.printf("%c", cam.sign_line_imageR[i]); } pc.printf("\r\n"); #endif pc.printf("L: %d mid: %d R: %d center : %d \r\n",line3[0],line3[1],line3[2],(line3[0]+line3[2])/2 ); stdio_mutex.unlock(); #endif Thread::wait(1); } } void servo_thread(void const *args){ while(1){ int ctrl=(line3[0]+line3[2])/2; v_servo=cam_to_M_ctrlr.compute(ctrl,118.0); // pc.printf("angle: %f\r\n",v_servo); stdio_mutex.lock(); servo.set_angle(v_servo); stdio_mutex.unlock(); Thread::wait(20); } } void motor_thread(void const *args){ while(1){ MotorA.rotate(v_motor); MotorB.rotate(v_motor); Thread::wait(1); } } /* void ctrl_thread(void const *args){ while(1){ b_r_c=(double)cam.black_centerR(); cam_to_M_ctrlr.compute(b_r_c,64.0); Thread::wait(1); } } */ // global resource int main() { // baud rate init --- no function pc.baud(115200); /* while(1){ if(tsi.readPercentage()>0.00011) break; } */ Thread th_c(cam_thread); // Thread thread(ctrl_thread); Thread thread(servo_thread); // Thread thread(motor_thread); Thread th_de(de_thread); while(1){ //idle // stdio_mutex.lock(); // printf("L: %d mid: %d R: %d\r\n",line3[0],line3[1],line3[2]); // stdio_mutex.unlock(); Thread::wait(2000); } return 0; }