k

Dependencies:   mbed SO1602A

Revision:
0:8aa125a0a09a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Aug 30 06:19:52 2019 +0000
@@ -0,0 +1,198 @@
+#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);
+    }
+}