Miya Miyagawa / Mbed 2 deprecated NEW_LineTraceHub

Dependencies:   mbed SO1602A

Files at this revision

API Documentation at this revision

Comitter:
Ryosei
Date:
Fri Aug 30 06:19:52 2019 +0000
Commit message:
aa

Changed in this revision

SO1602A.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 8aa125a0a09a SO1602A.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SO1602A.lib	Fri Aug 30 06:19:52 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/AkinoriHashimoto/code/SO1602A/#e17943b827d8
diff -r 000000000000 -r 8aa125a0a09a main.cpp
--- /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);
+    }
+}
diff -r 000000000000 -r 8aa125a0a09a mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Aug 30 06:19:52 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file