
share
Fork of BX-car_2 by
Revision 3:c5f2281b3ed2, committed 2014-06-04
- Comitter:
- backman
- Date:
- Wed Jun 04 14:41:28 2014 +0000
- Parent:
- 2:c51647d3c14d
- Child:
- 4:05b21dbca0c7
- Commit message:
- center;
Changed in this revision
--- a/camera_api.cpp Wed Jun 04 12:56:52 2014 +0000 +++ b/camera_api.cpp Wed Jun 04 14:41:28 2014 +0000 @@ -16,6 +16,273 @@ } +int BX_camera::black_centerR(void){ + + + // find center + // case 1 // | // + // case 2 / | / + + char find_type=0x00; + + int b_end=0; + int b_start=0; + + int b2_end=0; + int b2_start=0; + + + int center; + int j=64; + bool f1=false; + bool f2=false; + bool f3=false; + bool f4=false; + + + if(sign_line_imageR[64]==' ') + find_type=0x02; + else + find_type=0x01; + + + for(int i=64;i<128; i++,j--){ + + + switch(find_type){ + + + case 0x01: + + if(f1==false&&sign_line_imageR[i]==' '){ + if(f1==false){ + b_start=i; + f1=true; + } + + } + if(f1== true&& f2==false&&sign_line_imageR[i]=='O'){ + if(f2==false){ + b_end=i-1; + f2=true; + } + + } + + if(f3==false&&sign_line_imageR[j]==' '){ + if(f3==false){ + b2_end=j; + f3=true; + } + + } + if(f3==true&&f4==false&&sign_line_imageR[j]=='O'){ + if(f4==false){ + b2_start=j-1; + f4=true; + } + + } + + + break; + + + case 0x02: + + if(sign_line_imageR[i]=='O'){ + + if(f1==false){ + b_end=i; + f1=true; + } + } + + if(sign_line_imageR[j]=='O'){ + + if(f2==false){ + b_start=j; + f2=true; + } + + } + + + break; + + + + + } + + + } + + + switch(find_type){ + + case 0x01: + + if((b_end-b_start)>(b2_end-b2_start) ) + center=(b_end+b_start)/2; + + else + center=(b2_end+b2_start)/2; + break; + + case 0x02: + center=(b_end+b_start)/2; + + break; + } + + + return center; + + } + + + + +int BX_camera::black_centerL(void){ + + // find center + // case 1 // | // + //case 2 / | / + + + char find_type=0x00; + + int b_end=0; + int b_start=0; + int b2_end=0; + int b2_start=0; + + + int center; + int j=64; + bool f1=false; + bool f2=false; + bool f3=false; + bool f4=false; + + + if(sign_line_imageL[64]==' ') + find_type=0x02; + else + find_type=0x01; + + + for(int i=64;i<128; i++,j--){ + + + switch(find_type){ + + + case 0x01: + + if(f1==false&&sign_line_imageL[i]==' '){ + if(f1==false){ + b_start=i; + f1=true; + } + + } + if(f1== true&& f2==false&&sign_line_imageL[i]=='O'){ + if(f2==false){ + b_end=i-1; + f2=true; + } + + } + + if(f3==false&&sign_line_imageL[j]==' '){ + if(f3==false){ + b2_end=j; + f3=true; + } + + } + if(f3==true&&f4==false&&sign_line_imageL[j]=='O'){ + if(f4==false){ + b2_start=j-1; + f4=true; + } + + } + + + + + + + + + break; + + + case 0x02: + + if(sign_line_imageL[i]=='O'){ + + if(f1==false){ + b_end=i; + f1=true; + } + } + + if(sign_line_imageL[j]=='O'){ + + if(f2==false){ + b_start=j; + f2=true; + } + + } + + + break; + + + + + } + + + } + + + switch(find_type){ + + case 0x01: + + if((b_end-b_start)>(b2_end-b2_start) ) + center=(b_end+b_start)/2; + + else + center=(b2_end+b2_start)/2; + break; + + case 0x02: + center=(b_end+b_start)/2; + + break; + } + + return center; + + } + + + + + + + + + + + void BX_camera::read(void){
--- a/camera_api.h Wed Jun 04 12:56:52 2014 +0000 +++ b/camera_api.h Wed Jun 04 14:41:28 2014 +0000 @@ -11,13 +11,14 @@ //static void read(void); //block in here - unsigned int line_imageR[128]; - unsigned int line_imageL[128]; + BX_camera(); - + + int black_centerR(void); //index 0~127 + int black_centerL(void); char sign_line_imageL[128]; @@ -31,6 +32,10 @@ FastAnalogIn* line_CamL; DigitalOut* cam_clk; DigitalOut* si; + + unsigned int line_imageR[128]; //may buffer + unsigned int line_imageL[128]; + int w_f_vL; int b_f_vL;
--- a/main.cpp Wed Jun 04 12:56:52 2014 +0000 +++ b/main.cpp Wed Jun 04 14:41:28 2014 +0000 @@ -1,7 +1,9 @@ #include "mbed.h" #include "servo_api.h" #include "camera_api.h" -//BX_servo servo; + + +#define Debug_cam_uart Serial pc(USBTX, USBRX); @@ -9,6 +11,8 @@ BX_camera cam; + + int main() { /* @@ -16,31 +20,13 @@ int white_va; */ - +#ifdef Debug_cam_uart pc.baud(115200); - - - char find_type=0x00; - - int b_end; - int b_start; - - int b2_end; - int b2_start; - + while(1){ - int center; - int j=64; - bool f1; - bool f2; - bool f3; - bool f4; - while(1){ - - // - cam.read(); + cam.read(); for(int i=0;i<128;i++){ if(i==64) @@ -57,141 +43,33 @@ pc.printf("%c", cam.sign_line_imageR[i]); } pc.printf("\r\n"); - - - - - - // find center - // case 1 // | // - //case 2 / | / - /* - if(cam.sign_line_image[64]==' ') - find_type=0x02; - else - find_type=0x01; - - b_start=0; - b_end=0; - b2_start=0; - b2_end=0; - - j=64; - f1=false; - f2=false; - f3=false; - f4=false; - for(int i=64;i<128; i++,j--){ - - - switch(find_type){ - - - case 0x01: - - if(f1==false&&cam.sign_line_image[i]==' '){ - if(f1==false){ - b_start=i; - f1=true; - } - - } - if(f1== true&& f2==false&&cam.sign_line_image[i]=='O'){ - if(f2==false){ - b_end=i-1; - f2=true; - } - - } - - if(f3==false&&cam.sign_line_image[j]==' '){ - if(f3==false){ - b2_end=j; - f3=true; - } - - } - if(f3==true&&f4==false&&cam.sign_line_image[j]=='O'){ - if(f4==false){ - b2_start=j-1; - f4=true; - } - - } - - - - - - - - - break; - - - case 0x02: - - if(cam.sign_line_image[i]=='O'){ - - if(f1==false){ - b_end=i; - f1=true; - } - } - - if(cam.sign_line_image[j]=='O'){ - - if(f2==false){ - b_start=j; - f2=true; - } - - } - - - break; - - - - - } - - - } - - - switch(find_type){ - - case 0x01: - - if((b_end-b_start)>(b2_end-b2_start) ) - center=(b_end+b_start)/2; - - else - center=(b2_end+b2_start)/2; - - pc.printf("%d %d | %d %d\r\n",b_start,b_end,b2_start,b2_end); - - - break; - - case 0x02: - center=(b_end+b_start)/2; - - break; - } - pc.printf("ang :%d\r\n ",( (64.0-center) /64.0 )*90); + + + + pc.printf("R center : %d \r\nL center: %d\r\n",cam.black_centerR(),cam.black_centerL()); + + + } + + + + + + + + + // pc.printf("ang :%d\r\n ",( (64.0-center) /64.0 )*90); //-------------------------------------------- - servo.set_angle(( (64.0-center) /64.0 )*90 ); + // servo.set_angle(( (64.0-center) /64.0 )*90 ); - */ + - } + - + #endif @@ -204,113 +82,6 @@ - - - //tmp - int angle; - float black_pR=0; - float black_pL=0; - float black_pT=0; - //tune -/* - int min_va=90000; - int max_va=0; - int mid_va=0; - */ - - - - while(1){ - black_pR=0; - black_pL=0; - black_pT=0; - // min_va=90000; - // max_va=0; - angle=0; - cam.read(); - for(int i=0;i<64;i++){ - - - // angle+=cam.line_image[i]-cam.line_image[127-i]; - if(cam.line_imageR[i]==0) - black_pR++; - if(cam.line_imageR[127-i]==0) - black_pL++; - } - - - black_pT=black_pL+black_pR; - - - if(black_pL>black_pT/2){ - - angle=(black_pR/black_pT)*90; - - //angle= - } - else if(black_pR>black_pT/2){ - - angle=-1.0*(black_pR/black_pT)*90; - //angle=-0.5; - } - else{ - - angle=0; - - } - servo.set_angle(angle); - pc.printf("ang: %d",angle); - pc.printf("\r\n"); - - - - - - - - } - - - - - - - - // pc.printf("mid: %d|min: %d | max: %d | diff: %d",mid_va,min_va,max_va,max_va-min_va); - - - - - - //p - controller - - //servo angle not yet contorl - - - - - - - - - - - - - - - - - - - - - - - - - -