a

Dependencies:   FastIO mbed

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?

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