Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Tue Jul 19 2022 16:41:26 by
1.7.2