aa

Dependencies:   mbed

Revision:
0:0311bb0b38f7
Child:
1:fe3f80c4beeb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Sep 09 00:16:13 2019 +0000
@@ -0,0 +1,222 @@
+#include "mbed.h"
+#include "RingBuffer.h"
+#include "SO1602A.h"
+
+//********** pin define **********//
+#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  UART_SE    PA_2
+#define  UARTTX     PA_9
+#define  UARTRX     PA_10
+//********** pin define **********//
+
+//********** pin select **********//
+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),
+};
+
+DigitalOut uartSE(UART_SE);
+
+DigitalOut LED(LED3);
+
+//Serial uart(USBTX,USBRX);
+Serial uart(UARTTX,UARTRX);
+
+I2C i2c(SDA,SCL);
+SO1602A oled(i2c,0x78);
+//********** pin select **********//
+
+//********** define **********//
+#define  BUFFER_SIZE  10
+char RS485Data[BUFFER_SIZE];
+RINGBUFFER::RingBuffer RS485uart(RS485Data,BUFFER_SIZE);
+
+#define  SENDDATA_SIZE    8
+#define  SENSORDATA_SIZE  48
+
+const int pinDef[48] = { 0, 1, 2, 3, 4, 5,
+                        12,13,14,15, 7, 6,
+                        22,23, 8, 9,10,11,
+                        16,17,18,19,20,21,
+                        27,26,25,24,40,41,
+                        28,29,30,31,38,39,
+                        32,33,34,35,36,37,
+                        42,43,44,45,36,47};
+                        
+const int weight[6] = { 2, 1, 0, 0,-1,-2};
+
+char send[SENDDATA_SIZE] = {60,77,80,55,65,68,90,87};
+bool line[SENSORDATA_SIZE] = {0};
+
+void Transmit();
+void PinSelect(int pin);
+void SendDataUpdate(char sendData[], int dataSize);
+void LineDataRead(bool sensorData[], int dataSize);
+void SendDataMake(bool sensorData[], char sendData[]);
+//********** define **********//
+
+void InitiaLize(void) 
+{
+    uartSE = 1; //送信固定
+    
+    uart.baud(9600);
+    uart.attach(Transmit,Serial::TxIrq);
+}
+
+int main(void) 
+{
+    InitiaLize();
+    
+    while(1) 
+    {
+        LineDataRead(line,SENSORDATA_SIZE);
+        SendDataMake(line,send);
+        SendDataUpdate(send,SENDDATA_SIZE);
+    }
+}
+
+void Transmit() {
+    __disable_irq();
+    //uart.printf("%d\n\r",RS485uart.GetData());
+    uart.putc(RS485uart.GetData());
+    __enable_irq();
+    
+}
+
+void SendDataUpdate(char sendData[], int dataSize) {
+    __disable_irq();
+    if(!RS485uart.InAnyData()) {
+        RS485uart.PutData('S');
+        for(int i = 0; i < dataSize; i++) {
+            RS485uart.PutData(sendData[i]);
+        }
+        RS485uart.PutData('F');
+    }
+     __enable_irq();
+}
+
+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 < 16) {
+        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 < 32) {
+        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 < 48) {
+        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(bool sensorData[], int dataSize) {
+    int pin;
+    int readData = 0; 
+    for(int i = 0; i < dataSize; i++) {
+        pin = pinDef[i];
+        PinSelect(pin);
+        if(pin<=15) {
+            readData = y1.read();
+        } else if(pin<=31) {
+            readData = y2.read();
+        } else if(pin<=47) {
+            readData = y3.read();
+        }
+        if(readData < 0.8f) {
+            sensorData[i] = 0;
+        } else {
+            sensorData[i] = 1;
+        }
+        
+    }
+}
+
+void SendDataMake(bool sensorData[], char sendData[]) {
+    int data = 0;
+    bool ACflag = true;
+    bool NCflag = true;
+    int count = 0;
+    for(int i = 0; i < 8; i++) {
+        NCflag = true;
+        ACflag = true;
+        data = 0;
+        for(int j = 0; j < 6; j++) {
+            data += (!sensorData[count]) * weight[j];
+            if(sensorData[count] == 1) ACflag = false;
+            else if(sensorData[count] == 0) NCflag = false;
+            count++;
+        }
+        if(NCflag) sendData[i] = 'N';
+        else if(ACflag) sendData[i] = 'A';
+        else sendData[i] = data;
+    }
+}
\ No newline at end of file