Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- 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