QQQ

Dependencies:   mbed-rtos mbed

Fork of BX-car_s by Tony Lin

Committer:
physicsgood
Date:
Mon Jun 30 08:19:43 2014 +0000
Revision:
21:5f7efc1ca8ad
Parent:
20:4ed21397e775
Child:
22:1464a3f0a290
140630

Who changed what in which revision?

UserRevisionLine numberNew contents of line
backman 0:68c173249c01 1 #include "mbed.h"
backman 7:fd976e1ced33 2 #include "controller.h"
backman 1:82bc25a7b68b 3 #include "servo_api.h"
backman 1:82bc25a7b68b 4 #include "camera_api.h"
backman 6:5a39bde2e016 5 #include "motor_api.h"
backman 7:fd976e1ced33 6 #include "pot.h"
TonyLin 13:a33a7705fe2b 7
backman 3:c5f2281b3ed2 8
TonyLin 16:b1e11b865d05 9 #define Debug_cam_uart
backman 6:5a39bde2e016 10 #define R_eye
physicsgood 21:5f7efc1ca8ad 11 #define L_eye
TonyLin 14:303b22b76d7a 12 #define motor_on
backman 6:5a39bde2e016 13 #define Pcontroller
backman 8:8e49e21d80a2 14 #define task_ma_time
TonyLin 13:a33a7705fe2b 15 #define offset 65
TonyLin 13:a33a7705fe2b 16 #include "TSISensor.h"
backman 12:418e39749f48 17
TonyLin 13:a33a7705fe2b 18 Serial pc(USBTX, USBRX);
TonyLin 14:303b22b76d7a 19 BX_servo servo;
TonyLin 20:4ed21397e775 20 BX_camera cam(0);
backman 6:5a39bde2e016 21 BX_motor MotorA('A');
backman 6:5a39bde2e016 22 BX_motor MotorB('B');
TonyLin 13:a33a7705fe2b 23 BX_pot pot1('1'); // 90/30=3
TonyLin 13:a33a7705fe2b 24 BX_pot pot2('2');
TonyLin 13:a33a7705fe2b 25 PID cam_to_M_ctrlr(10.0,118.0,0.06,0.11,(0.104/30),0.0,0.0,10);
backman 8:8e49e21d80a2 26 DigitalOut task_pin(PTD1);
backman 9:33b99cb45e99 27 TSISensor tsi;
backman 12:418e39749f48 28
TonyLin 13:a33a7705fe2b 29 void run();
backman 12:418e39749f48 30
TonyLin 14:303b22b76d7a 31 int main()
TonyLin 14:303b22b76d7a 32 {
TonyLin 13:a33a7705fe2b 33 pc.baud(115200);
TonyLin 14:303b22b76d7a 34
TonyLin 15:57567d3ee27e 35 /*while(1) {
TonyLin 13:a33a7705fe2b 36 if(tsi.readPercentage()>0.00011)
TonyLin 14:303b22b76d7a 37 break;
TonyLin 15:57567d3ee27e 38 }*/
TonyLin 13:a33a7705fe2b 39 run();
TonyLin 14:303b22b76d7a 40
TonyLin 13:a33a7705fe2b 41 return 0;
TonyLin 14:303b22b76d7a 42 }
backman 12:418e39749f48 43
backman 12:418e39749f48 44
backman 7:fd976e1ced33 45
TonyLin 14:303b22b76d7a 46 void run()
TonyLin 14:303b22b76d7a 47 {
TonyLin 15:57567d3ee27e 48 double motor, angle=0.0;
TonyLin 14:303b22b76d7a 49 double b_r_c;
TonyLin 14:303b22b76d7a 50 double PID_v;
TonyLin 14:303b22b76d7a 51 double error , P, I, D, kp, r_kp;
TonyLin 14:303b22b76d7a 52 double last_error=0.0 ,last_I=0.0, last_brc, brc_df;
TonyLin 14:303b22b76d7a 53 bool first_time=true, r_kp_neg=false;
TonyLin 14:303b22b76d7a 54
TonyLin 14:303b22b76d7a 55 while(1) {
TonyLin 14:303b22b76d7a 56 #ifdef task_ma_time
TonyLin 14:303b22b76d7a 57 task_pin=1;
TonyLin 14:303b22b76d7a 58 #endif
TonyLin 14:303b22b76d7a 59
TonyLin 14:303b22b76d7a 60 cam.read();
TonyLin 14:303b22b76d7a 61 #ifdef Debug_cam_uart
TonyLin 14:303b22b76d7a 62 #ifdef L_eye
physicsgood 21:5f7efc1ca8ad 63 for(int i=127; i>=64; i--) {
physicsgood 21:5f7efc1ca8ad 64 if(i==127)
physicsgood 21:5f7efc1ca8ad 65 pc.printf("X");
physicsgood 21:5f7efc1ca8ad 66 else if(i==64)
TonyLin 14:303b22b76d7a 67 pc.printf("X");
TonyLin 14:303b22b76d7a 68 else
TonyLin 14:303b22b76d7a 69 pc.printf("%c", cam.sign_line_imageL[i]);
TonyLin 14:303b22b76d7a 70 }
physicsgood 21:5f7efc1ca8ad 71 pc.printf(" || ");
TonyLin 14:303b22b76d7a 72 #endif
TonyLin 14:303b22b76d7a 73 #ifdef R_eye
physicsgood 21:5f7efc1ca8ad 74 for(int i=64; i>=0; i--) {
TonyLin 14:303b22b76d7a 75 if(i==64)
TonyLin 14:303b22b76d7a 76 pc.printf("X");
TonyLin 14:303b22b76d7a 77 else
TonyLin 14:303b22b76d7a 78 pc.printf("%c", cam.sign_line_imageR[i]);
TonyLin 14:303b22b76d7a 79 }
TonyLin 19:eb0552a0ddae 80 pc.printf(" ");
physicsgood 21:5f7efc1ca8ad 81 pc.printf("\r\n");
TonyLin 14:303b22b76d7a 82 #endif
TonyLin 14:303b22b76d7a 83 #endif
TonyLin 14:303b22b76d7a 84
TonyLin 14:303b22b76d7a 85 #ifdef motor_on
TonyLin 14:303b22b76d7a 86 motor=pot1.read();
TonyLin 20:4ed21397e775 87 MotorA.rotate(motor);
TonyLin 20:4ed21397e775 88 MotorB.rotate(motor);
TonyLin 20:4ed21397e775 89 //pc.printf("%f\r\n",motor);
TonyLin 14:303b22b76d7a 90 #endif
TonyLin 14:303b22b76d7a 91
physicsgood 21:5f7efc1ca8ad 92 b_r_c=(double)cam.black_center();
backman 12:418e39749f48 93
physicsgood 21:5f7efc1ca8ad 94 PID_v=cam_to_M_ctrlr.compute(b_r_c,64);//set_angle()
physicsgood 21:5f7efc1ca8ad 95 pc.printf("\r\n");
physicsgood 21:5f7efc1ca8ad 96 //pc.printf("b_r_c: %f\r\n",b_r_c);
physicsgood 21:5f7efc1ca8ad 97 //pc.printf("angle: %f\r\n",PID_v);
physicsgood 21:5f7efc1ca8ad 98 //pc.printf("%f %d %d speed :%f bk_center %f PID:%f \r\n",cam_to_M_ctrlr.de_v,cam.de_v,cam.de_v2,motor,center,PID_v);
physicsgood 21:5f7efc1ca8ad 99 //center range 0~128
physicsgood 21:5f7efc1ca8ad 100 last_error = error;
physicsgood 21:5f7efc1ca8ad 101 //pc.printf("%d %d speed :%f bk_center %f PID:%f \r\n",cam.de_v,cam.de_v2,motor,b_r_c,PID_v);
TonyLin 13:a33a7705fe2b 102 servo.set_angle(PID_v);
TonyLin 14:303b22b76d7a 103
TonyLin 14:303b22b76d7a 104 #ifdef task_ma_time
TonyLin 14:303b22b76d7a 105 task_pin=0;
TonyLin 14:303b22b76d7a 106 #endif
TonyLin 14:303b22b76d7a 107 }
TonyLin 13:a33a7705fe2b 108 }