k
Revision 0:8aa125a0a09a, committed 2019-08-30
- Comitter:
- Ryosei
- Date:
- Fri Aug 30 06:19:52 2019 +0000
- Commit message:
- aa
Changed in this revision
--- /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
--- /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);
+ }
+}
--- /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