Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Boboobooov5 by
camera_api.cpp@22:25602957d6bf, 2014-07-11 (annotated)
- Committer:
- fhcrcmars
- Date:
- Fri Jul 11 07:44:10 2014 +0000
- Revision:
- 22:25602957d6bf
- Parent:
- 21:9b00595af99a
test camera line bits
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 | |
| fhcrcmars | 22:25602957d6bf | 22 | int l_care=10; | 
| fhcrcmars | 22:25602957d6bf | 23 | int r_care=64; | 
| 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 | 22:25602957d6bf | 29 | int b_thr_up=20; | 
| 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 | |
| fhcrcmars | 22:25602957d6bf | 69 | int l_care=64; | 
| fhcrcmars | 22:25602957d6bf | 70 | int r_care=115; | 
| 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 | 22:25602957d6bf | 76 | int b_thr_up=20; | 
| 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 | } | 
