chia-hsun wu / Mbed 2 deprecated Boboobooov6

Dependencies:   mbed-rtos mbed

Fork of Boboobooov5 by kao yi

Committer:
fhcrcmars
Date:
Sun Jul 06 12:37:48 2014 +0000
Revision:
21:9b00595af99a
Parent:
19:4869b10a962e
Child:
22:25602957d6bf
v6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
backman 1:82bc25a7b68b 1 #include "mbed.h"
backman 1:82bc25a7b68b 2 #include "camera_api.h"
backman 19:4869b10a962e 3 #include "TFC.h"
backman 1:82bc25a7b68b 4 #define clk 2 //ms
backman 19:4869b10a962e 5 #define task_ma_time
backman 19:4869b10a962e 6 #ifdef task_ma_time
backman 19:4869b10a962e 7 DigitalOut cam_p(PTE5);
backman 19:4869b10a962e 8 #endif
backman 6:5a39bde2e016 9
backman 13:63f9a5101205 10 BX_camera::BX_camera(int p)
backman 6:5a39bde2e016 11 {
backman 19:4869b10a962e 12
backman 6:5a39bde2e016 13 line_CamR = new FastAnalogIn(PTD5);
backman 6:5a39bde2e016 14 line_CamL= new FastAnalogIn(PTD6,0);
backman 6:5a39bde2e016 15 cam_clk=new DigitalOut(PTE1);
backman 6:5a39bde2e016 16 si=new DigitalOut(PTD7);
backman 13:63f9a5101205 17 padding = p;
backman 6:5a39bde2e016 18 }
backman 6:5a39bde2e016 19 int BX_camera::black_centerR(void)
backman 6:5a39bde2e016 20 {
backman 6:5a39bde2e016 21
fhcrcmars 21:9b00595af99a 22 int l_care=5;
fhcrcmars 21:9b00595af99a 23 int r_care=123;
backman 15:585df3979be8 24 int b_start=0;
backman 14:2d90b0066fc6 25 int b_end=0;
backman 15:585df3979be8 26 bool l_f1=false;
backman 15:585df3979be8 27 bool l_f2=false;
backman 15:585df3979be8 28 bool find=false;
fhcrcmars 21:9b00595af99a 29 int b_thr_up=15;
fhcrcmars 21:9b00595af99a 30 int b_thr_dn=3;
backman 6:5a39bde2e016 31 int b_w=0;
backman 15:585df3979be8 32
backman 15:585df3979be8 33 for(int i=r_care;i>l_care;i--){
backman 15:585df3979be8 34
backman 15:585df3979be8 35
backman 15:585df3979be8 36 if(l_f1==false&&sign_line_imageR[i]==' '){
backman 15:585df3979be8 37
backman 15:585df3979be8 38 b_start=i;
backman 15:585df3979be8 39 l_f1=true;
backman 15:585df3979be8 40 }
backman 15:585df3979be8 41 if(l_f1==true && sign_line_imageR[i]=='O'){
backman 15:585df3979be8 42 b_end=i-1;
backman 15:585df3979be8 43 l_f2=true;
backman 15:585df3979be8 44 }
backman 15:585df3979be8 45
backman 15:585df3979be8 46 if(l_f1==true && l_f2== true){
backman 15:585df3979be8 47 b_w=b_start-b_end;
fhcrcmars 21:9b00595af99a 48 if( b_thr_up>b_w&&b_w>= b_thr_dn){
backman 15:585df3979be8 49
backman 15:585df3979be8 50 find=true;
backman 15:585df3979be8 51 break;
backman 6:5a39bde2e016 52 }
backman 15:585df3979be8 53 else{
backman 15:585df3979be8 54 l_f1=false;
fhcrcmars 21:9b00595af99a 55 l_f2=false;
fhcrcmars 21:9b00595af99a 56 }
fhcrcmars 21:9b00595af99a 57 }
backman 6:5a39bde2e016 58 }
backman 15:585df3979be8 59 if(find)
backman 15:585df3979be8 60 return (b_start+b_end)/2;
backman 15:585df3979be8 61 else
backman 15:585df3979be8 62 return -1;
backman 15:585df3979be8 63 }
backman 6:5a39bde2e016 64
backman 11:418e39749f48 65
backman 16:b78dce5c0e98 66 int BX_camera::black_centerL(void)
backman 16:b78dce5c0e98 67 {
backman 16:b78dce5c0e98 68
backman 16:b78dce5c0e98 69 int l_care=10;
fhcrcmars 21:9b00595af99a 70 int r_care=123;
backman 16:b78dce5c0e98 71 int b_start=0;
backman 16:b78dce5c0e98 72 int b_end=0;
backman 16:b78dce5c0e98 73 bool l_f1=false;
backman 16:b78dce5c0e98 74 bool l_f2=false;
backman 16:b78dce5c0e98 75 bool find=false;
fhcrcmars 21:9b00595af99a 76 int b_thr_up=15;
fhcrcmars 21:9b00595af99a 77 int b_thr_dn=3;
backman 16:b78dce5c0e98 78 int b_w=0;
backman 16:b78dce5c0e98 79
backman 17:3dac99cf2b89 80 for(int i=l_care;i<r_care;i++){
backman 16:b78dce5c0e98 81
backman 16:b78dce5c0e98 82
backman 16:b78dce5c0e98 83 if(l_f1==false&&sign_line_imageL[i]==' '){
backman 16:b78dce5c0e98 84
backman 16:b78dce5c0e98 85 b_start=i;
backman 16:b78dce5c0e98 86 l_f1=true;
backman 16:b78dce5c0e98 87 }
backman 16:b78dce5c0e98 88 if(l_f1==true && sign_line_imageL[i]=='O'){
backman 16:b78dce5c0e98 89 b_end=i-1;
backman 16:b78dce5c0e98 90 l_f2=true;
backman 16:b78dce5c0e98 91 }
backman 16:b78dce5c0e98 92
backman 16:b78dce5c0e98 93 if(l_f1==true && l_f2== true){
backman 17:3dac99cf2b89 94 b_w=b_end-b_start;
fhcrcmars 21:9b00595af99a 95 if( b_thr_up>b_w&&b_w>= b_thr_dn){
backman 16:b78dce5c0e98 96
backman 16:b78dce5c0e98 97 find=true;
backman 16:b78dce5c0e98 98 break;
backman 16:b78dce5c0e98 99 }
backman 16:b78dce5c0e98 100 else{
backman 16:b78dce5c0e98 101 l_f1=false;
backman 16:b78dce5c0e98 102 l_f2=false;
backman 16:b78dce5c0e98 103
backman 16:b78dce5c0e98 104 }
backman 16:b78dce5c0e98 105
backman 16:b78dce5c0e98 106
backman 16:b78dce5c0e98 107 }
backman 16:b78dce5c0e98 108
backman 16:b78dce5c0e98 109
backman 16:b78dce5c0e98 110 }
backman 16:b78dce5c0e98 111 if(find)
backman 16:b78dce5c0e98 112 return (b_start+b_end)/2;
backman 16:b78dce5c0e98 113 else
backman 16:b78dce5c0e98 114 return -1;
backman 16:b78dce5c0e98 115 }
backman 6:5a39bde2e016 116
backman 6:5a39bde2e016 117
backman 6:5a39bde2e016 118
backman 19:4869b10a962e 119
backman 6:5a39bde2e016 120 void BX_camera::read(void)
backman 6:5a39bde2e016 121 {
backman 19:4869b10a962e 122
backman 6:5a39bde2e016 123 w_f_vL=0x0000;
backman 6:5a39bde2e016 124 b_f_vL=0xffff;
backman 19:4869b10a962e 125
backman 6:5a39bde2e016 126 w_f_vR=0x0000;
backman 6:5a39bde2e016 127 b_f_vR=0xffff;
backman 19:4869b10a962e 128
fhcrcmars 21:9b00595af99a 129 line_CamR->enable();
backman 19:4869b10a962e 130
backman 6:5a39bde2e016 131 *si=1;
backman 6:5a39bde2e016 132 *cam_clk=1;
backman 19:4869b10a962e 133
backman 6:5a39bde2e016 134 wait_us(30); // tune here
backman 6:5a39bde2e016 135 *si=0;
backman 6:5a39bde2e016 136 *cam_clk=0;
backman 19:4869b10a962e 137
backman 6:5a39bde2e016 138 //input 128 //both
backman 19:4869b10a962e 139
backman 6:5a39bde2e016 140 for(int i=0; i<128; i++) {
backman 6:5a39bde2e016 141 *cam_clk=1;
backman 6:5a39bde2e016 142 wait_us(5);
fhcrcmars 21:9b00595af99a 143
backman 6:5a39bde2e016 144 line_imageR[i]=line_CamR->read_u16();
backman 6:5a39bde2e016 145 // big small
backman 6:5a39bde2e016 146 if(line_imageR[i] > w_f_vR)
backman 6:5a39bde2e016 147 w_f_vR=line_imageR[i];
backman 6:5a39bde2e016 148 else if(line_imageR[i] < b_f_vR )
backman 6:5a39bde2e016 149 b_f_vR = line_imageR[i];
backman 19:4869b10a962e 150 *cam_clk=0;
backman 19:4869b10a962e 151 wait_us(5);
backman 19:4869b10a962e 152
backman 19:4869b10a962e 153
backman 19:4869b10a962e 154 }
backman 19:4869b10a962e 155 line_CamR->disable();
fhcrcmars 21:9b00595af99a 156
fhcrcmars 21:9b00595af99a 157 *si=1;
backman 19:4869b10a962e 158 *cam_clk=1;
backman 19:4869b10a962e 159
backman 19:4869b10a962e 160 wait_us(30); // tune here
backman 19:4869b10a962e 161 *si=0;
backman 19:4869b10a962e 162 *cam_clk=0;
backman 19:4869b10a962e 163
backman 19:4869b10a962e 164
backman 19:4869b10a962e 165
backman 19:4869b10a962e 166 cam_p=1;
fhcrcmars 21:9b00595af99a 167
backman 19:4869b10a962e 168 line_CamL->enable();
backman 19:4869b10a962e 169 for(int i=0; i<128; i++) {
backman 19:4869b10a962e 170 *cam_clk=1;
backman 19:4869b10a962e 171 wait_us(5);
backman 19:4869b10a962e 172
backman 19:4869b10a962e 173 line_imageL[i]=line_CamL->read_u16();
backman 19:4869b10a962e 174
backman 19:4869b10a962e 175 // big small
backman 6:5a39bde2e016 176 if(line_imageL[i] > w_f_vL)
backman 6:5a39bde2e016 177 w_f_vL=line_imageL[i];
backman 6:5a39bde2e016 178 else if(line_imageL[i] < b_f_vL )
backman 6:5a39bde2e016 179 b_f_vL = line_imageL[i];
fhcrcmars 21:9b00595af99a 180
backman 6:5a39bde2e016 181 *cam_clk=0;
backman 6:5a39bde2e016 182 wait_us(5);
backman 19:4869b10a962e 183
backman 19:4869b10a962e 184
backman 6:5a39bde2e016 185 }
fhcrcmars 21:9b00595af99a 186
backman 19:4869b10a962e 187 line_CamL->disable();
backman 19:4869b10a962e 188 cam_p=0;
fhcrcmars 21:9b00595af99a 189
backman 6:5a39bde2e016 190 //filter L R //may change
backman 19:4869b10a962e 191
backman 6:5a39bde2e016 192 for(int i=0; i<128; i++) {
backman 19:4869b10a962e 193
backman 6:5a39bde2e016 194 if( (line_imageR[i]-b_f_vR) < (w_f_vR - line_imageR[i] ) )
backman 6:5a39bde2e016 195 sign_line_imageR[i]=' ';
backman 6:5a39bde2e016 196 else
backman 6:5a39bde2e016 197 sign_line_imageR[i]='O';
backman 19:4869b10a962e 198
backman 6:5a39bde2e016 199 if( (line_imageL[i]-b_f_vL) < (w_f_vL - line_imageL[i] ) )
backman 6:5a39bde2e016 200 sign_line_imageL[i]=' ';
backman 6:5a39bde2e016 201 else
backman 6:5a39bde2e016 202 sign_line_imageL[i]='O';
backman 6:5a39bde2e016 203 }
backman 19:4869b10a962e 204
fhcrcmars 21:9b00595af99a 205 }