wu

Dependencies:   mbed-rtos mbed

Fork of Boboobooov4 by kao yi

Committer:
backman
Date:
Wed Jul 02 06:44:48 2014 +0000
Revision:
20:30799cbda86b
Parent:
19:4869b10a962e
al

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
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 }