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 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 }
Generated on Mon Jul 25 2022 22:14:07 by
1.7.2