aa

Dependencies:   mbed SO1602A

main.cpp

Committer:
Ryosei
Date:
2019-09-06
Revision:
2:77fe1a8f5bac
Parent:
1:63ae8cbbe758

File content as of revision 2:77fe1a8f5bac:

#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 pc(USBTX,USBRX);
Serial uart(PA_9,PA_10);
I2C i2c(SDA,SCL);
SO1602A oled(i2c,0x78);
Ticker komatuharuka;
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[1]<<6)+(data[2]<<5)+(data[3]<<4)+(data[4]<<3)+(data[5]<<2)+(data[12]<<1)+(data[13]<<0));
    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));
    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));
    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));
    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));
    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));
    
    uart.putc('S');
    wait_ms(50);
    for(int i=0; i<=5; i++) {
        uart.putc(send[i]);
        wait_ms(50);
        //pc.printf("%d : %d\n\r",i,send[i]);
    }
    uart.putc('F');
    
    for(int i=0; i<=47; i++) {
//        oled.printf("%d",data[i]);
    }
//    oled.printf("%d",send[0]);
}



int readdata[48];
char uartdata[6];
void printoled()
{
    int trimdata[48];
    int LAN[8];
    for(int i=0; i<=47; i++) {
        if(i<=7) {
            trimdata[i]=((uartdata[0] << i) & 0b10000000)>>7;
        } else if(i<=15) {
            trimdata[i]=((uartdata[1] << i-8) & 0b10000000)>>7;
        } else if(i<=23) {
            trimdata[i]=((uartdata[2] << i-16) & 0b10000000)>>7;
        } else if(i<=31) {
            trimdata[i]=((uartdata[3] << i-24) & 0b10000000)>>7;
        } else if(i<=39) {
            trimdata[i]=((uartdata[4] << i-32) & 0b10000000)>>7;
        } else if(i<=47) {
            trimdata[i]=((uartdata[5] << i-40) & 0b10000000)>>7;
        }
    }
    for(int i=0;i<=7;i++){
        LAN[i]=trimdata[i*6]*-2+trimdata[i*6+1]*-1+trimdata[i*6+4]*1+trimdata[i*6+5]*2;
    }
    oled.locate(0,0);
    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]);
}
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);
//        komatuharuka.attach(&printoled,0.1);
//        wait(0.01);
    }
}