kao yi
/
Boboobooov5
wu
Fork of Boboobooov4 by
camera_api.cpp@20:30799cbda86b, 2014-07-02 (annotated)
- Committer:
- backman
- Date:
- Wed Jul 02 06:44:48 2014 +0000
- Revision:
- 20:30799cbda86b
- Parent:
- 19:4869b10a962e
al
Who changed what in which revision?
User | Revision | Line number | New 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 | |
backman | 7:fd976e1ced33 | 22 | int l_care=10; |
backman | 7:fd976e1ced33 | 23 | int r_care=118; |
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; |
backman | 15:585df3979be8 | 29 | int b_thr_up=32; |
backman | 15:585df3979be8 | 30 | int b_thr_dn=5; |
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; |
backman | 15:585df3979be8 | 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; |
backman | 15:585df3979be8 | 55 | l_f2=false; |
backman | 15:585df3979be8 | 56 | |
backman | 15:585df3979be8 | 57 | } |
backman | 15:585df3979be8 | 58 | |
backman | 15:585df3979be8 | 59 | |
backman | 15:585df3979be8 | 60 | } |
backman | 15:585df3979be8 | 61 | |
backman | 15:585df3979be8 | 62 | |
backman | 6:5a39bde2e016 | 63 | } |
backman | 15:585df3979be8 | 64 | |
backman | 15:585df3979be8 | 65 | |
backman | 15:585df3979be8 | 66 | |
backman | 15:585df3979be8 | 67 | |
backman | 3:c5f2281b3ed2 | 68 | |
backman | 15:585df3979be8 | 69 | if(find) |
backman | 15:585df3979be8 | 70 | return (b_start+b_end)/2; |
backman | 15:585df3979be8 | 71 | else |
backman | 15:585df3979be8 | 72 | return -1; |
backman | 15:585df3979be8 | 73 | } |
backman | 6:5a39bde2e016 | 74 | |
backman | 11:418e39749f48 | 75 | |
backman | 16:b78dce5c0e98 | 76 | int BX_camera::black_centerL(void) |
backman | 16:b78dce5c0e98 | 77 | { |
backman | 16:b78dce5c0e98 | 78 | |
backman | 16:b78dce5c0e98 | 79 | int l_care=10; |
backman | 16:b78dce5c0e98 | 80 | int r_care=118; |
backman | 16:b78dce5c0e98 | 81 | int b_start=0; |
backman | 16:b78dce5c0e98 | 82 | int b_end=0; |
backman | 16:b78dce5c0e98 | 83 | bool l_f1=false; |
backman | 16:b78dce5c0e98 | 84 | bool l_f2=false; |
backman | 16:b78dce5c0e98 | 85 | bool find=false; |
backman | 16:b78dce5c0e98 | 86 | int b_thr_up=32; |
backman | 16:b78dce5c0e98 | 87 | int b_thr_dn=5; |
backman | 16:b78dce5c0e98 | 88 | int b_w=0; |
backman | 16:b78dce5c0e98 | 89 | |
backman | 17:3dac99cf2b89 | 90 | for(int i=l_care;i<r_care;i++){ |
backman | 16:b78dce5c0e98 | 91 | |
backman | 16:b78dce5c0e98 | 92 | |
backman | 16:b78dce5c0e98 | 93 | if(l_f1==false&&sign_line_imageL[i]==' '){ |
backman | 16:b78dce5c0e98 | 94 | |
backman | 16:b78dce5c0e98 | 95 | b_start=i; |
backman | 16:b78dce5c0e98 | 96 | l_f1=true; |
backman | 16:b78dce5c0e98 | 97 | } |
backman | 16:b78dce5c0e98 | 98 | if(l_f1==true && sign_line_imageL[i]=='O'){ |
backman | 16:b78dce5c0e98 | 99 | b_end=i-1; |
backman | 16:b78dce5c0e98 | 100 | l_f2=true; |
backman | 16:b78dce5c0e98 | 101 | } |
backman | 16:b78dce5c0e98 | 102 | |
backman | 16:b78dce5c0e98 | 103 | if(l_f1==true && l_f2== true){ |
backman | 17:3dac99cf2b89 | 104 | b_w=b_end-b_start; |
backman | 16:b78dce5c0e98 | 105 | if( b_thr_up>b_w&&b_w> b_thr_dn){ |
backman | 16:b78dce5c0e98 | 106 | |
backman | 16:b78dce5c0e98 | 107 | find=true; |
backman | 16:b78dce5c0e98 | 108 | break; |
backman | 16:b78dce5c0e98 | 109 | } |
backman | 16:b78dce5c0e98 | 110 | else{ |
backman | 16:b78dce5c0e98 | 111 | l_f1=false; |
backman | 16:b78dce5c0e98 | 112 | l_f2=false; |
backman | 16:b78dce5c0e98 | 113 | |
backman | 16:b78dce5c0e98 | 114 | } |
backman | 16:b78dce5c0e98 | 115 | |
backman | 16:b78dce5c0e98 | 116 | |
backman | 16:b78dce5c0e98 | 117 | } |
backman | 16:b78dce5c0e98 | 118 | |
backman | 16:b78dce5c0e98 | 119 | |
backman | 16:b78dce5c0e98 | 120 | } |
backman | 16:b78dce5c0e98 | 121 | |
backman | 16:b78dce5c0e98 | 122 | |
backman | 16:b78dce5c0e98 | 123 | |
backman | 16:b78dce5c0e98 | 124 | |
backman | 16:b78dce5c0e98 | 125 | |
backman | 16:b78dce5c0e98 | 126 | if(find) |
backman | 16:b78dce5c0e98 | 127 | return (b_start+b_end)/2; |
backman | 16:b78dce5c0e98 | 128 | else |
backman | 16:b78dce5c0e98 | 129 | return -1; |
backman | 16:b78dce5c0e98 | 130 | } |
backman | 6:5a39bde2e016 | 131 | |
backman | 6:5a39bde2e016 | 132 | |
backman | 6:5a39bde2e016 | 133 | |
backman | 19:4869b10a962e | 134 | |
backman | 6:5a39bde2e016 | 135 | void BX_camera::read(void) |
backman | 6:5a39bde2e016 | 136 | { |
backman | 19:4869b10a962e | 137 | |
backman | 6:5a39bde2e016 | 138 | w_f_vL=0x0000; |
backman | 6:5a39bde2e016 | 139 | b_f_vL=0xffff; |
backman | 19:4869b10a962e | 140 | |
backman | 6:5a39bde2e016 | 141 | w_f_vR=0x0000; |
backman | 6:5a39bde2e016 | 142 | b_f_vR=0xffff; |
backman | 19:4869b10a962e | 143 | |
backman | 19:4869b10a962e | 144 | |
backman | 19:4869b10a962e | 145 | line_CamR->enable(); |
backman | 19:4869b10a962e | 146 | |
backman | 6:5a39bde2e016 | 147 | *si=1; |
backman | 6:5a39bde2e016 | 148 | *cam_clk=1; |
backman | 19:4869b10a962e | 149 | |
backman | 6:5a39bde2e016 | 150 | wait_us(30); // tune here |
backman | 6:5a39bde2e016 | 151 | *si=0; |
backman | 6:5a39bde2e016 | 152 | *cam_clk=0; |
backman | 19:4869b10a962e | 153 | |
backman | 19:4869b10a962e | 154 | |
backman | 19:4869b10a962e | 155 | |
backman | 19:4869b10a962e | 156 | |
backman | 19:4869b10a962e | 157 | |
backman | 19:4869b10a962e | 158 | |
backman | 6:5a39bde2e016 | 159 | //input 128 //both |
backman | 19:4869b10a962e | 160 | |
backman | 6:5a39bde2e016 | 161 | for(int i=0; i<128; i++) { |
backman | 6:5a39bde2e016 | 162 | *cam_clk=1; |
backman | 6:5a39bde2e016 | 163 | wait_us(5); |
backman | 19:4869b10a962e | 164 | |
backman | 19:4869b10a962e | 165 | |
backman | 6:5a39bde2e016 | 166 | line_imageR[i]=line_CamR->read_u16(); |
backman | 19:4869b10a962e | 167 | |
backman | 19:4869b10a962e | 168 | |
backman | 19:4869b10a962e | 169 | |
backman | 19:4869b10a962e | 170 | |
backman | 19:4869b10a962e | 171 | |
backman | 6:5a39bde2e016 | 172 | // big small |
backman | 6:5a39bde2e016 | 173 | if(line_imageR[i] > w_f_vR) |
backman | 6:5a39bde2e016 | 174 | w_f_vR=line_imageR[i]; |
backman | 6:5a39bde2e016 | 175 | else if(line_imageR[i] < b_f_vR ) |
backman | 6:5a39bde2e016 | 176 | b_f_vR = line_imageR[i]; |
backman | 19:4869b10a962e | 177 | |
backman | 19:4869b10a962e | 178 | |
backman | 19:4869b10a962e | 179 | |
backman | 19:4869b10a962e | 180 | |
backman | 19:4869b10a962e | 181 | |
backman | 19:4869b10a962e | 182 | *cam_clk=0; |
backman | 19:4869b10a962e | 183 | wait_us(5); |
backman | 19:4869b10a962e | 184 | |
backman | 19:4869b10a962e | 185 | |
backman | 19:4869b10a962e | 186 | } |
backman | 19:4869b10a962e | 187 | line_CamR->disable(); |
backman | 19:4869b10a962e | 188 | /* |
backman | 19:4869b10a962e | 189 | *si=1; |
backman | 19:4869b10a962e | 190 | *cam_clk=1; |
backman | 19:4869b10a962e | 191 | |
backman | 19:4869b10a962e | 192 | wait_us(30); // tune here |
backman | 19:4869b10a962e | 193 | *si=0; |
backman | 19:4869b10a962e | 194 | *cam_clk=0; |
backman | 19:4869b10a962e | 195 | |
backman | 19:4869b10a962e | 196 | |
backman | 19:4869b10a962e | 197 | |
backman | 19:4869b10a962e | 198 | cam_p=1; |
backman | 19:4869b10a962e | 199 | line_CamL->enable(); |
backman | 19:4869b10a962e | 200 | for(int i=0; i<128; i++) { |
backman | 19:4869b10a962e | 201 | *cam_clk=1; |
backman | 19:4869b10a962e | 202 | wait_us(5); |
backman | 19:4869b10a962e | 203 | |
backman | 19:4869b10a962e | 204 | |
backman | 19:4869b10a962e | 205 | |
backman | 19:4869b10a962e | 206 | |
backman | 19:4869b10a962e | 207 | |
backman | 19:4869b10a962e | 208 | |
backman | 19:4869b10a962e | 209 | line_imageL[i]=line_CamL->read_u16(); |
backman | 19:4869b10a962e | 210 | |
backman | 19:4869b10a962e | 211 | // big small |
backman | 19:4869b10a962e | 212 | |
backman | 19:4869b10a962e | 213 | |
backman | 6:5a39bde2e016 | 214 | if(line_imageL[i] > w_f_vL) |
backman | 6:5a39bde2e016 | 215 | w_f_vL=line_imageL[i]; |
backman | 6:5a39bde2e016 | 216 | else if(line_imageL[i] < b_f_vL ) |
backman | 6:5a39bde2e016 | 217 | b_f_vL = line_imageL[i]; |
backman | 19:4869b10a962e | 218 | |
backman | 19:4869b10a962e | 219 | |
backman | 19:4869b10a962e | 220 | |
backman | 19:4869b10a962e | 221 | |
backman | 6:5a39bde2e016 | 222 | *cam_clk=0; |
backman | 6:5a39bde2e016 | 223 | wait_us(5); |
backman | 19:4869b10a962e | 224 | |
backman | 19:4869b10a962e | 225 | |
backman | 6:5a39bde2e016 | 226 | } |
backman | 19:4869b10a962e | 227 | |
backman | 19:4869b10a962e | 228 | |
backman | 19:4869b10a962e | 229 | |
backman | 19:4869b10a962e | 230 | |
backman | 19:4869b10a962e | 231 | line_CamL->disable(); |
backman | 19:4869b10a962e | 232 | cam_p=0; |
backman | 19:4869b10a962e | 233 | */ |
backman | 6:5a39bde2e016 | 234 | //filter L R //may change |
backman | 19:4869b10a962e | 235 | |
backman | 6:5a39bde2e016 | 236 | for(int i=0; i<128; i++) { |
backman | 19:4869b10a962e | 237 | |
backman | 19:4869b10a962e | 238 | |
backman | 6:5a39bde2e016 | 239 | if( (line_imageR[i]-b_f_vR) < (w_f_vR - line_imageR[i] ) ) |
backman | 6:5a39bde2e016 | 240 | sign_line_imageR[i]=' '; |
backman | 6:5a39bde2e016 | 241 | else |
backman | 6:5a39bde2e016 | 242 | sign_line_imageR[i]='O'; |
backman | 19:4869b10a962e | 243 | |
backman | 19:4869b10a962e | 244 | |
backman | 6:5a39bde2e016 | 245 | if( (line_imageL[i]-b_f_vL) < (w_f_vL - line_imageL[i] ) ) |
backman | 6:5a39bde2e016 | 246 | sign_line_imageL[i]=' '; |
backman | 6:5a39bde2e016 | 247 | else |
backman | 6:5a39bde2e016 | 248 | sign_line_imageL[i]='O'; |
backman | 19:4869b10a962e | 249 | |
backman | 19:4869b10a962e | 250 | |
backman | 19:4869b10a962e | 251 | |
backman | 19:4869b10a962e | 252 | |
backman | 19:4869b10a962e | 253 | |
backman | 6:5a39bde2e016 | 254 | if(i==0) { |
backman | 6:5a39bde2e016 | 255 | sign_line_imageR[i]='X'; |
backman | 6:5a39bde2e016 | 256 | sign_line_imageL[i]='X'; |
backman | 6:5a39bde2e016 | 257 | } |
backman | 19:4869b10a962e | 258 | |
backman | 19:4869b10a962e | 259 | |
backman | 6:5a39bde2e016 | 260 | } |
backman | 19:4869b10a962e | 261 | |
backman | 19:4869b10a962e | 262 | |
backman | 19:4869b10a962e | 263 | |
backman | 6:5a39bde2e016 | 264 | } |