Miya Miyagawa / Mbed 2 deprecated NEW_LineTraceHub

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 Serial uart(PA_9,PA_10);
00050 Serial pc(USBTX,USBRX);
00051 I2C i2c(SDA,SCL);
00052 SO1602A oled(i2c,0x78);
00053 
00054 void PinSelect(int pin)
00055 {
00056     bool selectnum[16][4]= {
00057         {0,0,0,0},
00058         {0,0,0,1},
00059         {0,0,1,0},
00060         {0,0,1,1},
00061         {0,1,0,0},
00062         {0,1,0,1},
00063         {0,1,1,0},
00064         {0,1,1,1},
00065         {1,0,0,0},
00066         {1,0,0,1},
00067         {1,0,1,0},
00068         {1,0,1,1},
00069         {1,1,0,0},
00070         {1,1,0,1},
00071         {1,1,1,0},
00072         {1,1,1,1},
00073     };
00074     if(pin<=15) {
00075         select1[0]=selectnum[pin][3];
00076         select1[1]=selectnum[pin][2];
00077         select1[2]=selectnum[pin][1];
00078         select1[3]=selectnum[pin][0];
00079         for(int i=0; i<=3; i++) {
00080             select2[i]=0;
00081             select3[i]=0;
00082         }
00083     } else if(pin<=31) {
00084         select2[0]=selectnum[pin-16][3];
00085         select2[1]=selectnum[pin-16][2];
00086         select2[2]=selectnum[pin-16][1];
00087         select2[3]=selectnum[pin-16][0];
00088         for(int i=0; i<=3; i++) {
00089             select1[i]=0;
00090             select3[i]=0;
00091         }
00092     } else if(pin<=47) {
00093         select3[0]=selectnum[pin-32][3];
00094         select3[1]=selectnum[pin-32][2];
00095         select3[2]=selectnum[pin-32][1];
00096         select3[3]=selectnum[pin-32][0];
00097         for(int i=0; i<=3; i++) {
00098             select1[i]=0;
00099             select2[i]=0;
00100         }
00101     }
00102 }
00103 
00104 void LineDataRead(int read[48])
00105 {
00106     float anal[48];
00107     for(int i=0; i<=47; i++) {
00108         PinSelect(i);
00109         if(i<=15) {
00110             anal[i]=y1.read();
00111         } else if(i<=31) {
00112             anal[i]=y2.read();
00113         } else if(i<=47) {
00114             anal[i]=y3.read();
00115         }
00116 //        pc.printf("%f ",anal[i]);
00117 
00118         if(anal[i]<0.8f) {
00119             read[i]=0;
00120         } else {
00121             read[i]=1;
00122         }
00123 //        oled.printf("%.3f",read[i]);
00124         
00125     }
00126 //    oled.printf("%d %f",read[0],anal[0]);
00127 }
00128 
00129 void DataTrim(char send[6],int data[48])
00130 {
00131     send[0]=char((data[0]<<7)+(data[5]<<6)+(data[1]<<5)+(data[4]<<4)+(data[2]<<3)+(data[3]<<2)+(data[12]<<1)+(data[6]<<0));
00132     send[1]=char((data[13]<<7)+(data[7]<<6)+(data[14]<<5)+(data[15]<<4)+(data[22]<<3)+(data[11]<<2)+(data[23]<<1)+(data[10]<<0));
00133     send[2]=char((data[8]<<7)+(data[9]<<6)+(data[16]<<5)+(data[21]<<4)+(data[17]<<3)+(data[20]<<2)+(data[18]<<1)+(data[19]<<0));
00134     send[3]=char((data[27]<<7)+(data[41]<<6)+(data[37]<<5)+(data[40]<<4)+(data[25]<<3)+(data[24]<<2)+(data[28]<<1)+(data[39]<<0));
00135     send[4]=char((data[29]<<7)+(data[38]<<6)+(data[30]<<5)+(data[31]<<4)+(data[32]<<3)+(data[37]<<2)+(data[33]<<1)+(data[36]<<0));
00136     send[5]=char((data[34]<<7)+(data[35]<<6)+(data[42]<<5)+(data[47]<<4)+(data[43]<<3)+(data[46]<<2)+(data[44]<<1)+(data[45]<<0));
00137     for(int i=0; i<=5; i++) {
00138         uart.putc(send[i]);
00139     }
00140     for(int i=0; i<=47; i++) {
00141 //        oled.printf("%d",data[i]);
00142     }
00143 //    oled.printf("%d",send[0]);
00144 }
00145 
00146 
00147 void printoled(char printdata[6])
00148 {
00149     int trimdata[48];
00150     for(int i=0; i<=47; i++) {
00151         if(i<=7) {
00152             trimdata[i]=((printdata[0] << i) & 0b10000000)>>7;
00153         } else if(i<=15) {
00154             trimdata[i]=((printdata[1] << i-8) & 0b10000000)>>7;
00155         } else if(i<=23) {
00156             trimdata[i]=((printdata[2] << i-16) & 0b10000000)>>7;
00157         } else if(i<=31) {
00158             trimdata[i]=((printdata[3] << i-24) & 0b10000000)>>7;
00159         } else if(i<=39) {
00160             trimdata[i]=((printdata[4] << i-32) & 0b10000000)>>7;
00161         } else if(i<=47) {
00162             trimdata[i]=((printdata[5] << i-40) & 0b10000000)>>7;
00163         }
00164     }
00165     int LAN[8];
00166     for(int i=0; i<=7; i++) {
00167         LAN[i]=!trimdata[i]*-2+!trimdata[i+2]*2+!trimdata[i+4]*-1+!trimdata[i+5]*1;
00168     }
00169     oled.locate(0,0);
00170     oled.printf("%+2d  %+2d  %+2d  %+2d  %+2d  %+2d  %+2d  %+2d",LAN[0],LAN[1],LAN[2],LAN[3],LAN[4],LAN[5],LAN[6],LAN[7]);
00171 }
00172 int readdata[48];
00173 char uartdata[6];
00174 void Initialize()
00175 {
00176     for(int i=0; i<=47; i++) {
00177         readdata[i]=0;
00178     }
00179     for(int i=0; i<=5; i++) {
00180         uartdata[i]=0x00;
00181     }
00182 }
00183 
00184 int main()
00185 {
00186     pc.baud(9600);
00187     uart.baud(38400);
00188     Initialize();
00189     uartSE=1;
00190     oled.init();
00191     oled.setDispFlag(true,false,false);
00192     while(1) {
00193         LineDataRead(readdata);
00194         DataTrim(uartdata,readdata);
00195         printoled(uartdata);
00196         wait(0.01);
00197     }
00198 }