SonicMEMS@Cornell
/
mbed_S9132_stream04
a
main.cpp@1:17d4a70bff6a, 2015-08-25 (annotated)
- Committer:
- visarute
- Date:
- Tue Aug 25 20:58:52 2015 +0000
- Revision:
- 1:17d4a70bff6a
- Parent:
- 0:cd12a9602e45
mbed_S9132_stream04; Read out data from Hamamatsu S9132 Profile sensor; and stream data to computer through serial usb
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
visarute | 0:cd12a9602e45 | 1 | /*============================================================================ |
visarute | 1:17d4a70bff6a | 2 | mbed_S9132_stream04 |
visarute | 0:cd12a9602e45 | 3 | Read out data from Hamamatsu S9132 Profile sensor |
visarute | 0:cd12a9602e45 | 4 | and stream data to computer through serial usb |
visarute | 0:cd12a9602e45 | 5 | Visarute Pinrod |
visarute | 0:cd12a9602e45 | 6 | SonicMEMS Laboratory, ECE, Cornell University, Ithaca, NY, USA |
visarute | 1:17d4a70bff6a | 7 | August 20, 2015 |
visarute | 0:cd12a9602e45 | 8 | ============================================================================*/ |
visarute | 0:cd12a9602e45 | 9 | |
visarute | 0:cd12a9602e45 | 10 | #include "mbed.h" |
visarute | 0:cd12a9602e45 | 11 | #include "FastIO.h" |
visarute | 0:cd12a9602e45 | 12 | |
visarute | 0:cd12a9602e45 | 13 | FastOut<p23> stC; |
visarute | 0:cd12a9602e45 | 14 | FastOut<p24> clkC; |
visarute | 0:cd12a9602e45 | 15 | FastIn<p25> eosX; |
visarute | 0:cd12a9602e45 | 16 | FastIn<p26> trigX; |
visarute | 0:cd12a9602e45 | 17 | FastIn<p27> eocX; |
visarute | 0:cd12a9602e45 | 18 | FastIn<p28> doY; |
visarute | 0:cd12a9602e45 | 19 | FastIn<p29> doX; |
visarute | 0:cd12a9602e45 | 20 | FastIn<p30> trigY; |
visarute | 0:cd12a9602e45 | 21 | |
visarute | 0:cd12a9602e45 | 22 | //DigitalOut stC(p23); |
visarute | 0:cd12a9602e45 | 23 | //DigitalOut clkC(p24); |
visarute | 0:cd12a9602e45 | 24 | //DigitalIn eosX(p25); |
visarute | 0:cd12a9602e45 | 25 | //DigitalIn trigX(p26); |
visarute | 0:cd12a9602e45 | 26 | //DigitalIn eocX(p27); |
visarute | 0:cd12a9602e45 | 27 | //DigitalIn doY(p28); |
visarute | 0:cd12a9602e45 | 28 | //DigitalIn doX(p29); |
visarute | 0:cd12a9602e45 | 29 | //DigitalIn trigY(p30); |
visarute | 0:cd12a9602e45 | 30 | // DigitalOut myled(LED1); |
visarute | 0:cd12a9602e45 | 31 | |
visarute | 0:cd12a9602e45 | 32 | // Object |
visarute | 0:cd12a9602e45 | 33 | Serial pc(USBTX, USBRX); // tx, rx |
visarute | 0:cd12a9602e45 | 34 | |
visarute | 0:cd12a9602e45 | 35 | void initial(){ |
visarute | 0:cd12a9602e45 | 36 | pc.baud(460800); |
visarute | 0:cd12a9602e45 | 37 | //pc.baud(921600); |
visarute | 0:cd12a9602e45 | 38 | stC=1; |
visarute | 0:cd12a9602e45 | 39 | clkC= 0; |
visarute | 0:cd12a9602e45 | 40 | } |
visarute | 0:cd12a9602e45 | 41 | |
visarute | 0:cd12a9602e45 | 42 | void readS9132() { |
visarute | 0:cd12a9602e45 | 43 | short i=0; |
visarute | 0:cd12a9602e45 | 44 | short x[256] = {0}; |
visarute | 0:cd12a9602e45 | 45 | short y[256] = {0}; |
visarute | 0:cd12a9602e45 | 46 | for(i=0;i<256;i++){ |
visarute | 0:cd12a9602e45 | 47 | x[i]=0xEA6; |
visarute | 0:cd12a9602e45 | 48 | y[i]=0xEA6; |
visarute | 0:cd12a9602e45 | 49 | } |
visarute | 0:cd12a9602e45 | 50 | char eoc=2; |
visarute | 0:cd12a9602e45 | 51 | char bit=11; |
visarute | 0:cd12a9602e45 | 52 | short xp = 0; |
visarute | 0:cd12a9602e45 | 53 | short yp = 0; |
visarute | 0:cd12a9602e45 | 54 | char xo = 0; |
visarute | 0:cd12a9602e45 | 55 | char yo = 0; |
visarute | 0:cd12a9602e45 | 56 | short pxi=0; |
visarute | 0:cd12a9602e45 | 57 | stC=1; |
visarute | 0:cd12a9602e45 | 58 | clkC= 0; |
visarute | 0:cd12a9602e45 | 59 | stC=0; |
visarute | 0:cd12a9602e45 | 60 | wait_us(1); |
visarute | 0:cd12a9602e45 | 61 | clkC= 1; |
visarute | 0:cd12a9602e45 | 62 | wait_us(1); |
visarute | 0:cd12a9602e45 | 63 | clkC= 0; |
visarute | 0:cd12a9602e45 | 64 | wait_us(1); |
visarute | 0:cd12a9602e45 | 65 | clkC= 1; |
visarute | 0:cd12a9602e45 | 66 | wait_us(1); |
visarute | 0:cd12a9602e45 | 67 | clkC= 0; |
visarute | 0:cd12a9602e45 | 68 | wait_us(1); |
visarute | 0:cd12a9602e45 | 69 | |
visarute | 0:cd12a9602e45 | 70 | wait_us(1); |
visarute | 0:cd12a9602e45 | 71 | stC=1; |
visarute | 0:cd12a9602e45 | 72 | //pc.printf("\n\n ========= Restart MBED ========= \n\n"); |
visarute | 0:cd12a9602e45 | 73 | for(i=0;i<3200;i++) { |
visarute | 0:cd12a9602e45 | 74 | //pc.printf(" i = %d ",i); |
visarute | 0:cd12a9602e45 | 75 | clkC= 1; |
visarute | 0:cd12a9602e45 | 76 | wait_us(1); |
visarute | 0:cd12a9602e45 | 77 | /*pc.printf(" trigX "); |
visarute | 0:cd12a9602e45 | 78 | if (trigX.read() == 1){ |
visarute | 0:cd12a9602e45 | 79 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 80 | }else{ |
visarute | 0:cd12a9602e45 | 81 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 82 | } |
visarute | 0:cd12a9602e45 | 83 | pc.printf(" trigY "); |
visarute | 0:cd12a9602e45 | 84 | if (trigY.read() == 1){ |
visarute | 0:cd12a9602e45 | 85 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 86 | }else{ |
visarute | 0:cd12a9602e45 | 87 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 88 | }*/ |
visarute | 0:cd12a9602e45 | 89 | clkC= 0; |
visarute | 0:cd12a9602e45 | 90 | wait_us(1); |
visarute | 0:cd12a9602e45 | 91 | //pc.printf(" eoc "); |
visarute | 0:cd12a9602e45 | 92 | if (eocX.read() == 1){ |
visarute | 0:cd12a9602e45 | 93 | //pc.printf("1"); |
visarute | 0:cd12a9602e45 | 94 | eoc=1; |
visarute | 0:cd12a9602e45 | 95 | }else{ |
visarute | 0:cd12a9602e45 | 96 | //pc.printf("0"); |
visarute | 0:cd12a9602e45 | 97 | eoc=0; |
visarute | 0:cd12a9602e45 | 98 | } |
visarute | 0:cd12a9602e45 | 99 | /*pc.printf(" eos "); |
visarute | 0:cd12a9602e45 | 100 | if (eosX.read() == 1){ |
visarute | 0:cd12a9602e45 | 101 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 102 | }else{ |
visarute | 0:cd12a9602e45 | 103 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 104 | } |
visarute | 0:cd12a9602e45 | 105 | pc.printf(" doX ");*/ |
visarute | 0:cd12a9602e45 | 106 | if (doX.read() == 1){ |
visarute | 0:cd12a9602e45 | 107 | //pc.printf("1"); |
visarute | 0:cd12a9602e45 | 108 | xo=1; |
visarute | 0:cd12a9602e45 | 109 | }else{ |
visarute | 0:cd12a9602e45 | 110 | //pc.printf("0"); |
visarute | 0:cd12a9602e45 | 111 | xo=0; |
visarute | 0:cd12a9602e45 | 112 | } |
visarute | 0:cd12a9602e45 | 113 | //pc.printf(" doY "); |
visarute | 0:cd12a9602e45 | 114 | if (doY.read() == 1){ |
visarute | 0:cd12a9602e45 | 115 | //pc.printf("1"); |
visarute | 0:cd12a9602e45 | 116 | yo=1; |
visarute | 0:cd12a9602e45 | 117 | }else{ |
visarute | 0:cd12a9602e45 | 118 | //pc.printf("0"); |
visarute | 0:cd12a9602e45 | 119 | yo=0; |
visarute | 0:cd12a9602e45 | 120 | } |
visarute | 0:cd12a9602e45 | 121 | |
visarute | 0:cd12a9602e45 | 122 | /*pc.printf(" trigX "); |
visarute | 0:cd12a9602e45 | 123 | if (trigX.read() == 1){ |
visarute | 0:cd12a9602e45 | 124 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 125 | }else{ |
visarute | 0:cd12a9602e45 | 126 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 127 | } |
visarute | 0:cd12a9602e45 | 128 | pc.printf(" trigY "); |
visarute | 0:cd12a9602e45 | 129 | if (trigY.read() == 1){ |
visarute | 0:cd12a9602e45 | 130 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 131 | }else{ |
visarute | 0:cd12a9602e45 | 132 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 133 | } |
visarute | 0:cd12a9602e45 | 134 | pc.printf("\n"); |
visarute | 0:cd12a9602e45 | 135 | */ |
visarute | 0:cd12a9602e45 | 136 | |
visarute | 0:cd12a9602e45 | 137 | if(eoc==0){ |
visarute | 0:cd12a9602e45 | 138 | bit--; |
visarute | 0:cd12a9602e45 | 139 | if(bit<10){ |
visarute | 0:cd12a9602e45 | 140 | xp=xp<<1|xo; |
visarute | 0:cd12a9602e45 | 141 | yp=yp<<1|yo; |
visarute | 0:cd12a9602e45 | 142 | } |
visarute | 0:cd12a9602e45 | 143 | if(bit==0){ |
visarute | 0:cd12a9602e45 | 144 | bit=11; |
visarute | 0:cd12a9602e45 | 145 | x[pxi]=xp; |
visarute | 0:cd12a9602e45 | 146 | y[pxi]=yp; |
visarute | 0:cd12a9602e45 | 147 | pxi++; |
visarute | 0:cd12a9602e45 | 148 | //pc.printf("pxi= %d, x = %03X, y = %03X\n",pxi,xp,yp); |
visarute | 0:cd12a9602e45 | 149 | wait_us(1); |
visarute | 0:cd12a9602e45 | 150 | xp=0; |
visarute | 0:cd12a9602e45 | 151 | yp=0; |
visarute | 0:cd12a9602e45 | 152 | |
visarute | 0:cd12a9602e45 | 153 | } |
visarute | 0:cd12a9602e45 | 154 | } |
visarute | 0:cd12a9602e45 | 155 | } |
visarute | 0:cd12a9602e45 | 156 | pc.printf("[CAM_READ_ST]"); |
visarute | 0:cd12a9602e45 | 157 | for(i=0;i<256;i++){ |
visarute | 0:cd12a9602e45 | 158 | pc.printf("%03X%03X",x[i],y[i]); |
visarute | 0:cd12a9602e45 | 159 | //pc.printf(" i= %d, x = %03X, y = %03X\n",i,x[i],y[i]); |
visarute | 0:cd12a9602e45 | 160 | } |
visarute | 0:cd12a9602e45 | 161 | pc.printf("[CAM_READ_ED]\n"); |
visarute | 0:cd12a9602e45 | 162 | } |
visarute | 0:cd12a9602e45 | 163 | |
visarute | 0:cd12a9602e45 | 164 | void flushS9132() { |
visarute | 0:cd12a9602e45 | 165 | short i=0; |
visarute | 0:cd12a9602e45 | 166 | short x[256] = {0}; |
visarute | 0:cd12a9602e45 | 167 | short y[256] = {0}; |
visarute | 0:cd12a9602e45 | 168 | for(i=0;i<256;i++){ |
visarute | 0:cd12a9602e45 | 169 | x[i]=0xEA6; |
visarute | 0:cd12a9602e45 | 170 | y[i]=0xEA6; |
visarute | 0:cd12a9602e45 | 171 | } |
visarute | 0:cd12a9602e45 | 172 | char eoc=2; |
visarute | 0:cd12a9602e45 | 173 | char bit=11; |
visarute | 0:cd12a9602e45 | 174 | short xp = 0; |
visarute | 0:cd12a9602e45 | 175 | short yp = 0; |
visarute | 0:cd12a9602e45 | 176 | char xo = 0; |
visarute | 0:cd12a9602e45 | 177 | char yo = 0; |
visarute | 0:cd12a9602e45 | 178 | short pxi=0; |
visarute | 0:cd12a9602e45 | 179 | stC=1; |
visarute | 0:cd12a9602e45 | 180 | clkC= 0; |
visarute | 0:cd12a9602e45 | 181 | stC=0; |
visarute | 0:cd12a9602e45 | 182 | wait_us(1); |
visarute | 0:cd12a9602e45 | 183 | clkC= 1; |
visarute | 0:cd12a9602e45 | 184 | wait_us(1); |
visarute | 0:cd12a9602e45 | 185 | clkC= 0; |
visarute | 0:cd12a9602e45 | 186 | wait_us(1); |
visarute | 0:cd12a9602e45 | 187 | clkC= 1; |
visarute | 0:cd12a9602e45 | 188 | wait_us(1); |
visarute | 0:cd12a9602e45 | 189 | clkC= 0; |
visarute | 0:cd12a9602e45 | 190 | wait_us(1); |
visarute | 0:cd12a9602e45 | 191 | |
visarute | 0:cd12a9602e45 | 192 | wait_us(1); |
visarute | 0:cd12a9602e45 | 193 | stC=1; |
visarute | 0:cd12a9602e45 | 194 | //pc.printf("\n\n ========= Restart MBED ========= \n\n"); |
visarute | 0:cd12a9602e45 | 195 | for(i=0;i<3200;i++) { |
visarute | 0:cd12a9602e45 | 196 | //pc.printf(" i = %d ",i); |
visarute | 0:cd12a9602e45 | 197 | clkC= 1; |
visarute | 0:cd12a9602e45 | 198 | wait_us(1); |
visarute | 0:cd12a9602e45 | 199 | /*pc.printf(" trigX "); |
visarute | 0:cd12a9602e45 | 200 | if (trigX.read() == 1){ |
visarute | 0:cd12a9602e45 | 201 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 202 | }else{ |
visarute | 0:cd12a9602e45 | 203 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 204 | } |
visarute | 0:cd12a9602e45 | 205 | pc.printf(" trigY "); |
visarute | 0:cd12a9602e45 | 206 | if (trigY.read() == 1){ |
visarute | 0:cd12a9602e45 | 207 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 208 | }else{ |
visarute | 0:cd12a9602e45 | 209 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 210 | }*/ |
visarute | 0:cd12a9602e45 | 211 | clkC= 0; |
visarute | 0:cd12a9602e45 | 212 | wait_us(1); |
visarute | 0:cd12a9602e45 | 213 | //pc.printf(" eoc "); |
visarute | 0:cd12a9602e45 | 214 | if (eocX.read() == 1){ |
visarute | 0:cd12a9602e45 | 215 | //pc.printf("1"); |
visarute | 0:cd12a9602e45 | 216 | eoc=1; |
visarute | 0:cd12a9602e45 | 217 | }else{ |
visarute | 0:cd12a9602e45 | 218 | //pc.printf("0"); |
visarute | 0:cd12a9602e45 | 219 | eoc=0; |
visarute | 0:cd12a9602e45 | 220 | } |
visarute | 0:cd12a9602e45 | 221 | /*pc.printf(" eos "); |
visarute | 0:cd12a9602e45 | 222 | if (eosX.read() == 1){ |
visarute | 0:cd12a9602e45 | 223 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 224 | }else{ |
visarute | 0:cd12a9602e45 | 225 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 226 | } |
visarute | 0:cd12a9602e45 | 227 | pc.printf(" doX ");*/ |
visarute | 0:cd12a9602e45 | 228 | if (doX.read() == 1){ |
visarute | 0:cd12a9602e45 | 229 | //pc.printf("1"); |
visarute | 0:cd12a9602e45 | 230 | xo=1; |
visarute | 0:cd12a9602e45 | 231 | }else{ |
visarute | 0:cd12a9602e45 | 232 | //pc.printf("0"); |
visarute | 0:cd12a9602e45 | 233 | xo=0; |
visarute | 0:cd12a9602e45 | 234 | } |
visarute | 0:cd12a9602e45 | 235 | //pc.printf(" doY "); |
visarute | 0:cd12a9602e45 | 236 | if (doY.read() == 1){ |
visarute | 0:cd12a9602e45 | 237 | //pc.printf("1"); |
visarute | 0:cd12a9602e45 | 238 | yo=1; |
visarute | 0:cd12a9602e45 | 239 | }else{ |
visarute | 0:cd12a9602e45 | 240 | //pc.printf("0"); |
visarute | 0:cd12a9602e45 | 241 | yo=0; |
visarute | 0:cd12a9602e45 | 242 | } |
visarute | 0:cd12a9602e45 | 243 | |
visarute | 0:cd12a9602e45 | 244 | /*pc.printf(" trigX "); |
visarute | 0:cd12a9602e45 | 245 | if (trigX.read() == 1){ |
visarute | 0:cd12a9602e45 | 246 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 247 | }else{ |
visarute | 0:cd12a9602e45 | 248 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 249 | } |
visarute | 0:cd12a9602e45 | 250 | pc.printf(" trigY "); |
visarute | 0:cd12a9602e45 | 251 | if (trigY.read() == 1){ |
visarute | 0:cd12a9602e45 | 252 | pc.printf("1"); |
visarute | 0:cd12a9602e45 | 253 | }else{ |
visarute | 0:cd12a9602e45 | 254 | pc.printf("0"); |
visarute | 0:cd12a9602e45 | 255 | } |
visarute | 0:cd12a9602e45 | 256 | pc.printf("\n"); |
visarute | 0:cd12a9602e45 | 257 | */ |
visarute | 0:cd12a9602e45 | 258 | |
visarute | 0:cd12a9602e45 | 259 | if(eoc==0){ |
visarute | 0:cd12a9602e45 | 260 | bit--; |
visarute | 0:cd12a9602e45 | 261 | if(bit<10){ |
visarute | 0:cd12a9602e45 | 262 | xp=xp<<1|xo; |
visarute | 0:cd12a9602e45 | 263 | yp=yp<<1|yo; |
visarute | 0:cd12a9602e45 | 264 | } |
visarute | 0:cd12a9602e45 | 265 | if(bit==0){ |
visarute | 0:cd12a9602e45 | 266 | bit=11; |
visarute | 0:cd12a9602e45 | 267 | x[pxi]=xp; |
visarute | 0:cd12a9602e45 | 268 | y[pxi]=yp; |
visarute | 0:cd12a9602e45 | 269 | pxi++; |
visarute | 0:cd12a9602e45 | 270 | //pc.printf("pxi= %d, x = %03X, y = %03X\n",pxi,xp,yp); |
visarute | 0:cd12a9602e45 | 271 | wait_us(1); |
visarute | 0:cd12a9602e45 | 272 | xp=0; |
visarute | 0:cd12a9602e45 | 273 | yp=0; |
visarute | 0:cd12a9602e45 | 274 | |
visarute | 0:cd12a9602e45 | 275 | } |
visarute | 0:cd12a9602e45 | 276 | } |
visarute | 0:cd12a9602e45 | 277 | } |
visarute | 0:cd12a9602e45 | 278 | } |
visarute | 0:cd12a9602e45 | 279 | |
visarute | 0:cd12a9602e45 | 280 | int main(){ |
visarute | 0:cd12a9602e45 | 281 | // Variable for main function |
visarute | 0:cd12a9602e45 | 282 | char buf[16]; // Buffer for the command from PC |
visarute | 0:cd12a9602e45 | 283 | initial(); |
visarute | 0:cd12a9602e45 | 284 | while(1) { |
visarute | 0:cd12a9602e45 | 285 | flushS9132(); |
visarute | 0:cd12a9602e45 | 286 | if (pc.readable()) { |
visarute | 0:cd12a9602e45 | 287 | //Command format: Start Mode Submode VALUe enD S F F FFFF D |
visarute | 0:cd12a9602e45 | 288 | pc.gets(buf, 16); |
visarute | 0:cd12a9602e45 | 289 | //pc.printf("Get buf: %s\n",buf); |
visarute | 0:cd12a9602e45 | 290 | if ((buf[0] == 'S')&&(buf[7] == 'D')) { |
visarute | 0:cd12a9602e45 | 291 | //Mode switch |
visarute | 0:cd12a9602e45 | 292 | switch(buf[1]) { |
visarute | 0:cd12a9602e45 | 293 | //read all axis mode |
visarute | 0:cd12a9602e45 | 294 | case 'c': |
visarute | 0:cd12a9602e45 | 295 | // camera |
visarute | 0:cd12a9602e45 | 296 | switch(buf[2]) { |
visarute | 0:cd12a9602e45 | 297 | case 'o': |
visarute | 0:cd12a9602e45 | 298 | readS9132(); |
visarute | 0:cd12a9602e45 | 299 | break; |
visarute | 0:cd12a9602e45 | 300 | default: |
visarute | 0:cd12a9602e45 | 301 | break; |
visarute | 0:cd12a9602e45 | 302 | } |
visarute | 0:cd12a9602e45 | 303 | default: |
visarute | 0:cd12a9602e45 | 304 | break; |
visarute | 0:cd12a9602e45 | 305 | } |
visarute | 0:cd12a9602e45 | 306 | } |
visarute | 0:cd12a9602e45 | 307 | } |
visarute | 0:cd12a9602e45 | 308 | } |
visarute | 0:cd12a9602e45 | 309 | return 0; |
visarute | 0:cd12a9602e45 | 310 | } |