Miya Miyagawa / Mbed 2 deprecated NEW_LineTraceHub_2

Dependencies:   mbed SO1602A

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SO1602A.h"
00003 #define select1_0 PB_4
00004 #define select1_1 PB_5
00005 #define select1_2 PB_3
00006 #define select1_3 PB_1
00007 #define select2_0 PF_0
00008 #define select2_1 PF_1
00009 #define select2_2 PA_8
00010 #define select2_3 PA_11
00011 #define select3_0 PA_4
00012 #define select3_1 PA_5
00013 #define select3_2 PA_7
00014 #define select3_3 PA_6
00015 
00016 #define Z0 PA_0
00017 #define Z1 PA_1
00018 #define Z2 PA_3
00019 
00020 #define SDA PB_7
00021 #define SCL PB_6
00022 
00023 #define uartSEpin PA_2
00024 
00025 DigitalOut uartSE(uartSEpin);
00026 
00027 AnalogIn y1(Z0);
00028 AnalogIn y2(Z1);
00029 AnalogIn y3(Z2);
00030 
00031 DigitalOut select1[]= {
00032     DigitalOut(select1_0),
00033     DigitalOut(select1_1),
00034     DigitalOut(select1_2),
00035     DigitalOut(select1_3),
00036 };
00037 DigitalOut select2[]= {
00038     DigitalOut(select2_0),
00039     DigitalOut(select2_1),
00040     DigitalOut(select2_2),
00041     DigitalOut(select2_3),
00042 };
00043 DigitalOut select3[]= {
00044     DigitalOut(select3_0),
00045     DigitalOut(select3_1),
00046     DigitalOut(select3_2),
00047     DigitalOut(select3_3),
00048 };
00049 
00050 Serial pc(USBTX,USBRX);
00051 Serial uart(PA_9,PA_10);
00052 I2C i2c(SDA,SCL);
00053 SO1602A oled(i2c,0x78);
00054 Ticker komatuharuka;
00055 void PinSelect(int pin)
00056 {
00057     bool selectnum[16][4]= {
00058         {0,0,0,0},
00059         {0,0,0,1},
00060         {0,0,1,0},
00061         {0,0,1,1},
00062         {0,1,0,0},
00063         {0,1,0,1},
00064         {0,1,1,0},
00065         {0,1,1,1},
00066         {1,0,0,0},
00067         {1,0,0,1},
00068         {1,0,1,0},
00069         {1,0,1,1},
00070         {1,1,0,0},
00071         {1,1,0,1},
00072         {1,1,1,0},
00073         {1,1,1,1},
00074     };
00075     if(pin<=15) {
00076         select1[0]=selectnum[pin][3];
00077         select1[1]=selectnum[pin][2];
00078         select1[2]=selectnum[pin][1];
00079         select1[3]=selectnum[pin][0];
00080         for(int i=0; i<=3; i++) {
00081             select2[i]=0;
00082             select3[i]=0;
00083         }
00084     } else if(pin<=31) {
00085         select2[0]=selectnum[pin-16][3];
00086         select2[1]=selectnum[pin-16][2];
00087         select2[2]=selectnum[pin-16][1];
00088         select2[3]=selectnum[pin-16][0];
00089         for(int i=0; i<=3; i++) {
00090             select1[i]=0;
00091             select3[i]=0;
00092         }
00093     } else if(pin<=47) {
00094         select3[0]=selectnum[pin-32][3];
00095         select3[1]=selectnum[pin-32][2];
00096         select3[2]=selectnum[pin-32][1];
00097         select3[3]=selectnum[pin-32][0];
00098         for(int i=0; i<=3; i++) {
00099             select1[i]=0;
00100             select2[i]=0;
00101         }
00102     }
00103 }
00104 
00105 void LineDataRead(int read[48])
00106 {
00107     float anal[48];
00108     for(int i=0; i<=47; i++) {
00109         PinSelect(i);
00110         if(i<=15) {
00111             anal[i]=y1.read();
00112         } else if(i<=31) {
00113             anal[i]=y2.read();
00114         } else if(i<=47) {
00115             anal[i]=y3.read();
00116         }
00117 //       pc.printf("%f ",anal[i]);
00118 
00119         if(anal[i]<0.8f) {
00120             read[i]=0;
00121         } else {
00122             read[i]=1;
00123         }
00124 //        oled.printf("%.3f",read[i]);
00125         
00126     }
00127 //    oled.printf("%d %f",read[0],anal[0]);
00128 }
00129 
00130 void DataTrim(char send[6],int data[48])
00131 {
00132     send[0]=char((data[0]<<7)+(data[1]<<6)+(data[2]<<5)+(data[3]<<4)+(data[4]<<3)+(data[5]<<2)+(data[12]<<1)+(data[13]<<0));
00133     send[1]=char((data[14]<<7)+(data[15]<<6)+(data[7]<<5)+(data[6]<<4)+(data[22]<<3)+(data[23]<<2)+(data[8]<<1)+(data[9]<<0));
00134     send[2]=char((data[10]<<7)+(data[11]<<6)+(data[16]<<5)+(data[17]<<4)+(data[18]<<3)+(data[19]<<2)+(data[20]<<1)+(data[21]<<0));
00135     send[3]=char((data[27]<<7)+(data[26]<<6)+(data[25]<<5)+(data[24]<<4)+(data[40]<<3)+(data[41]<<2)+(data[28]<<1)+(data[29]<<0));
00136     send[4]=char((data[30]<<7)+(data[31]<<6)+(data[38]<<5)+(data[39]<<4)+(data[32]<<3)+(data[33]<<2)+(data[34]<<1)+(data[35]<<0));
00137     send[5]=char((data[36]<<7)+(data[37]<<6)+(data[42]<<5)+(data[43]<<4)+(data[44]<<3)+(data[45]<<2)+(data[46]<<1)+(data[47]<<0));
00138     
00139     uart.putc('S');
00140     wait_ms(50);
00141     for(int i=0; i<=5; i++) {
00142         uart.putc(send[i]);
00143         wait_ms(50);
00144         //pc.printf("%d : %d\n\r",i,send[i]);
00145     }
00146     uart.putc('F');
00147     
00148     for(int i=0; i<=47; i++) {
00149 //        oled.printf("%d",data[i]);
00150     }
00151 //    oled.printf("%d",send[0]);
00152 }
00153 
00154 
00155 
00156 int readdata[48];
00157 char uartdata[6];
00158 void printoled()
00159 {
00160     int trimdata[48];
00161     int LAN[8];
00162     for(int i=0; i<=47; i++) {
00163         if(i<=7) {
00164             trimdata[i]=((uartdata[0] << i) & 0b10000000)>>7;
00165         } else if(i<=15) {
00166             trimdata[i]=((uartdata[1] << i-8) & 0b10000000)>>7;
00167         } else if(i<=23) {
00168             trimdata[i]=((uartdata[2] << i-16) & 0b10000000)>>7;
00169         } else if(i<=31) {
00170             trimdata[i]=((uartdata[3] << i-24) & 0b10000000)>>7;
00171         } else if(i<=39) {
00172             trimdata[i]=((uartdata[4] << i-32) & 0b10000000)>>7;
00173         } else if(i<=47) {
00174             trimdata[i]=((uartdata[5] << i-40) & 0b10000000)>>7;
00175         }
00176     }
00177     for(int i=0;i<=7;i++){
00178         LAN[i]=trimdata[i*6]*-2+trimdata[i*6+1]*-1+trimdata[i*6+4]*1+trimdata[i*6+5]*2;
00179     }
00180     oled.locate(0,0);
00181     pc.printf("%+2d  %+2d  %+2d  %+2d  %+2d  %+2d  %+2d  %+2d\n",LAN[0],LAN[1],LAN[2],LAN[3],LAN[4],LAN[5],LAN[6],LAN[7]);
00182 }
00183 void Initialize()
00184 {
00185     for(int i=0; i<=47; i++) {
00186         readdata[i]=0;
00187     }
00188     for(int i=0; i<=5; i++) {
00189         uartdata[i]=0x00;
00190     }
00191 }
00192 
00193 int main()
00194 {
00195     pc.baud(9600);
00196     uart.baud(38400);
00197     Initialize();
00198     uartSE=1;
00199     oled.init();
00200     oled.setDispFlag(true,false,false);
00201     while(1) {
00202         LineDataRead(readdata);
00203         DataTrim(uartdata,readdata);
00204 //        komatuharuka.attach(&printoled,0.1);
00205 //        wait(0.01);
00206     }
00207 }