Miya Miyagawa
/
NEW_LineTraceHub
k
main.cpp
- Committer:
- Ryosei
- Date:
- 2019-08-30
- Revision:
- 0:8aa125a0a09a
File content as of revision 0:8aa125a0a09a:
#include "mbed.h" #include "SO1602A.h" #define select1_0 PB_4 #define select1_1 PB_5 #define select1_2 PB_3 #define select1_3 PB_1 #define select2_0 PF_0 #define select2_1 PF_1 #define select2_2 PA_8 #define select2_3 PA_11 #define select3_0 PA_4 #define select3_1 PA_5 #define select3_2 PA_7 #define select3_3 PA_6 #define Z0 PA_0 #define Z1 PA_1 #define Z2 PA_3 #define SDA PB_7 #define SCL PB_6 #define uartSEpin PA_2 DigitalOut uartSE(uartSEpin); AnalogIn y1(Z0); AnalogIn y2(Z1); AnalogIn y3(Z2); DigitalOut select1[]= { DigitalOut(select1_0), DigitalOut(select1_1), DigitalOut(select1_2), DigitalOut(select1_3), }; DigitalOut select2[]= { DigitalOut(select2_0), DigitalOut(select2_1), DigitalOut(select2_2), DigitalOut(select2_3), }; DigitalOut select3[]= { DigitalOut(select3_0), DigitalOut(select3_1), DigitalOut(select3_2), DigitalOut(select3_3), }; Serial uart(PA_9,PA_10); Serial pc(USBTX,USBRX); I2C i2c(SDA,SCL); SO1602A oled(i2c,0x78); void PinSelect(int pin) { bool selectnum[16][4]= { {0,0,0,0}, {0,0,0,1}, {0,0,1,0}, {0,0,1,1}, {0,1,0,0}, {0,1,0,1}, {0,1,1,0}, {0,1,1,1}, {1,0,0,0}, {1,0,0,1}, {1,0,1,0}, {1,0,1,1}, {1,1,0,0}, {1,1,0,1}, {1,1,1,0}, {1,1,1,1}, }; if(pin<=15) { select1[0]=selectnum[pin][3]; select1[1]=selectnum[pin][2]; select1[2]=selectnum[pin][1]; select1[3]=selectnum[pin][0]; for(int i=0; i<=3; i++) { select2[i]=0; select3[i]=0; } } else if(pin<=31) { select2[0]=selectnum[pin-16][3]; select2[1]=selectnum[pin-16][2]; select2[2]=selectnum[pin-16][1]; select2[3]=selectnum[pin-16][0]; for(int i=0; i<=3; i++) { select1[i]=0; select3[i]=0; } } else if(pin<=47) { select3[0]=selectnum[pin-32][3]; select3[1]=selectnum[pin-32][2]; select3[2]=selectnum[pin-32][1]; select3[3]=selectnum[pin-32][0]; for(int i=0; i<=3; i++) { select1[i]=0; select2[i]=0; } } } void LineDataRead(int read[48]) { float anal[48]; for(int i=0; i<=47; i++) { PinSelect(i); if(i<=15) { anal[i]=y1.read(); } else if(i<=31) { anal[i]=y2.read(); } else if(i<=47) { anal[i]=y3.read(); } // pc.printf("%f ",anal[i]); if(anal[i]<0.8f) { read[i]=0; } else { read[i]=1; } // oled.printf("%.3f",read[i]); } // oled.printf("%d %f",read[0],anal[0]); } void DataTrim(char send[6],int data[48]) { 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)); 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)); 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)); 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)); 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)); 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)); for(int i=0; i<=5; i++) { uart.putc(send[i]); } for(int i=0; i<=47; i++) { // oled.printf("%d",data[i]); } // oled.printf("%d",send[0]); } void printoled(char printdata[6]) { int trimdata[48]; for(int i=0; i<=47; i++) { if(i<=7) { trimdata[i]=((printdata[0] << i) & 0b10000000)>>7; } else if(i<=15) { trimdata[i]=((printdata[1] << i-8) & 0b10000000)>>7; } else if(i<=23) { trimdata[i]=((printdata[2] << i-16) & 0b10000000)>>7; } else if(i<=31) { trimdata[i]=((printdata[3] << i-24) & 0b10000000)>>7; } else if(i<=39) { trimdata[i]=((printdata[4] << i-32) & 0b10000000)>>7; } else if(i<=47) { trimdata[i]=((printdata[5] << i-40) & 0b10000000)>>7; } } int LAN[8]; for(int i=0; i<=7; i++) { LAN[i]=!trimdata[i]*-2+!trimdata[i+2]*2+!trimdata[i+4]*-1+!trimdata[i+5]*1; } oled.locate(0,0); 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]); } int readdata[48]; char uartdata[6]; void Initialize() { for(int i=0; i<=47; i++) { readdata[i]=0; } for(int i=0; i<=5; i++) { uartdata[i]=0x00; } } int main() { pc.baud(9600); uart.baud(38400); Initialize(); uartSE=1; oled.init(); oled.setDispFlag(true,false,false); while(1) { LineDataRead(readdata); DataTrim(uartdata,readdata); printoled(uartdata); wait(0.01); } }