aa

Dependencies:   mbed

Committer:
yabahiro
Date:
Wed Sep 18 00:22:34 2019 +0000
Revision:
1:fe3f80c4beeb
Parent:
0:0311bb0b38f7
Child:
2:3459b9282009
aaa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
M_souta 0:0311bb0b38f7 1 #include "mbed.h"
M_souta 0:0311bb0b38f7 2 #include "RingBuffer.h"
M_souta 0:0311bb0b38f7 3 #include "SO1602A.h"
M_souta 0:0311bb0b38f7 4
M_souta 0:0311bb0b38f7 5 //********** pin define **********//
M_souta 0:0311bb0b38f7 6 #define SELECT1_0 PB_4
M_souta 0:0311bb0b38f7 7 #define SELECT1_1 PB_5
M_souta 0:0311bb0b38f7 8 #define SELECT1_2 PB_3
M_souta 0:0311bb0b38f7 9 #define SELECT1_3 PB_1
M_souta 0:0311bb0b38f7 10 #define SELECT2_0 PF_0
M_souta 0:0311bb0b38f7 11 #define SELECT2_1 PF_1
M_souta 0:0311bb0b38f7 12 #define SELECT2_2 PA_8
M_souta 0:0311bb0b38f7 13 #define SELECT2_3 PA_11
M_souta 0:0311bb0b38f7 14 #define SELECT3_0 PA_4
M_souta 0:0311bb0b38f7 15 #define SELECT3_1 PA_5
M_souta 0:0311bb0b38f7 16 #define SELECT3_2 PA_7
M_souta 0:0311bb0b38f7 17 #define SELECT3_3 PA_6
M_souta 0:0311bb0b38f7 18 #define Z0 PA_0
M_souta 0:0311bb0b38f7 19 #define Z1 PA_1
M_souta 0:0311bb0b38f7 20 #define Z2 PA_3
M_souta 0:0311bb0b38f7 21 #define SDA PB_7
M_souta 0:0311bb0b38f7 22 #define SCL PB_6
M_souta 0:0311bb0b38f7 23 #define UART_SE PA_2
M_souta 0:0311bb0b38f7 24 #define UARTTX PA_9
M_souta 0:0311bb0b38f7 25 #define UARTRX PA_10
M_souta 0:0311bb0b38f7 26 //********** pin define **********//
M_souta 0:0311bb0b38f7 27
M_souta 0:0311bb0b38f7 28 //********** pin select **********//
M_souta 0:0311bb0b38f7 29 AnalogIn y1(Z0);
M_souta 0:0311bb0b38f7 30 AnalogIn y2(Z1);
M_souta 0:0311bb0b38f7 31 AnalogIn y3(Z2);
M_souta 0:0311bb0b38f7 32
M_souta 0:0311bb0b38f7 33 DigitalOut select1[]= {
M_souta 0:0311bb0b38f7 34 DigitalOut(SELECT1_0),
M_souta 0:0311bb0b38f7 35 DigitalOut(SELECT1_1),
M_souta 0:0311bb0b38f7 36 DigitalOut(SELECT1_2),
M_souta 0:0311bb0b38f7 37 DigitalOut(SELECT1_3),
M_souta 0:0311bb0b38f7 38 };
M_souta 0:0311bb0b38f7 39 DigitalOut select2[]= {
M_souta 0:0311bb0b38f7 40 DigitalOut(SELECT2_0),
M_souta 0:0311bb0b38f7 41 DigitalOut(SELECT2_1),
M_souta 0:0311bb0b38f7 42 DigitalOut(SELECT2_2),
M_souta 0:0311bb0b38f7 43 DigitalOut(SELECT2_3),
M_souta 0:0311bb0b38f7 44 };
M_souta 0:0311bb0b38f7 45 DigitalOut select3[]= {
M_souta 0:0311bb0b38f7 46 DigitalOut(SELECT3_0),
M_souta 0:0311bb0b38f7 47 DigitalOut(SELECT3_1),
M_souta 0:0311bb0b38f7 48 DigitalOut(SELECT3_2),
M_souta 0:0311bb0b38f7 49 DigitalOut(SELECT3_3),
M_souta 0:0311bb0b38f7 50 };
M_souta 0:0311bb0b38f7 51
M_souta 0:0311bb0b38f7 52 DigitalOut uartSE(UART_SE);
M_souta 0:0311bb0b38f7 53
M_souta 0:0311bb0b38f7 54 DigitalOut LED(LED3);
M_souta 0:0311bb0b38f7 55
M_souta 0:0311bb0b38f7 56 //Serial uart(USBTX,USBRX);
M_souta 0:0311bb0b38f7 57 Serial uart(UARTTX,UARTRX);
M_souta 0:0311bb0b38f7 58
M_souta 0:0311bb0b38f7 59 I2C i2c(SDA,SCL);
M_souta 0:0311bb0b38f7 60 SO1602A oled(i2c,0x78);
yabahiro 1:fe3f80c4beeb 61
M_souta 0:0311bb0b38f7 62 //********** pin select **********//
M_souta 0:0311bb0b38f7 63
M_souta 0:0311bb0b38f7 64 //********** define **********//
M_souta 0:0311bb0b38f7 65 #define BUFFER_SIZE 10
M_souta 0:0311bb0b38f7 66 char RS485Data[BUFFER_SIZE];
M_souta 0:0311bb0b38f7 67 RINGBUFFER::RingBuffer RS485uart(RS485Data,BUFFER_SIZE);
M_souta 0:0311bb0b38f7 68
M_souta 0:0311bb0b38f7 69 #define SENDDATA_SIZE 8
M_souta 0:0311bb0b38f7 70 #define SENSORDATA_SIZE 48
M_souta 0:0311bb0b38f7 71
M_souta 0:0311bb0b38f7 72 const int pinDef[48] = { 0, 1, 2, 3, 4, 5,
yabahiro 1:fe3f80c4beeb 73 12,13,14,15, 7, 6,
yabahiro 1:fe3f80c4beeb 74 22,23, 8, 9,10,11,
yabahiro 1:fe3f80c4beeb 75 16,17,18,19,20,21,
yabahiro 1:fe3f80c4beeb 76 27,26,25,24,40,41,
yabahiro 1:fe3f80c4beeb 77 28,29,30,31,38,39,
yabahiro 1:fe3f80c4beeb 78 32,33,34,35,36,37,
yabahiro 1:fe3f80c4beeb 79 42,43,44,45,36,47
yabahiro 1:fe3f80c4beeb 80 };
yabahiro 1:fe3f80c4beeb 81
M_souta 0:0311bb0b38f7 82 const int weight[6] = { 2, 1, 0, 0,-1,-2};
M_souta 0:0311bb0b38f7 83
M_souta 0:0311bb0b38f7 84 char send[SENDDATA_SIZE] = {60,77,80,55,65,68,90,87};
M_souta 0:0311bb0b38f7 85 bool line[SENSORDATA_SIZE] = {0};
M_souta 0:0311bb0b38f7 86
M_souta 0:0311bb0b38f7 87 void Transmit();
M_souta 0:0311bb0b38f7 88 void PinSelect(int pin);
M_souta 0:0311bb0b38f7 89 void SendDataUpdate(char sendData[], int dataSize);
M_souta 0:0311bb0b38f7 90 void LineDataRead(bool sensorData[], int dataSize);
M_souta 0:0311bb0b38f7 91 void SendDataMake(bool sensorData[], char sendData[]);
M_souta 0:0311bb0b38f7 92 //********** define **********//
M_souta 0:0311bb0b38f7 93
yabahiro 1:fe3f80c4beeb 94 void InitiaLize(void)
M_souta 0:0311bb0b38f7 95 {
M_souta 0:0311bb0b38f7 96 uartSE = 1; //送信固定
yabahiro 1:fe3f80c4beeb 97
M_souta 0:0311bb0b38f7 98 uart.baud(9600);
M_souta 0:0311bb0b38f7 99 uart.attach(Transmit,Serial::TxIrq);
M_souta 0:0311bb0b38f7 100 }
M_souta 0:0311bb0b38f7 101
yabahiro 1:fe3f80c4beeb 102 int main(void)
M_souta 0:0311bb0b38f7 103 {
M_souta 0:0311bb0b38f7 104 InitiaLize();
yabahiro 1:fe3f80c4beeb 105 oled.init();
yabahiro 1:fe3f80c4beeb 106 oled.setDispFlag(true,false,false);
yabahiro 1:fe3f80c4beeb 107 while(1) {
yabahiro 1:fe3f80c4beeb 108 if(send[2]>250) {
yabahiro 1:fe3f80c4beeb 109 oled.locate(0,0);
yabahiro 1:fe3f80c4beeb 110 oled.printf("%d",send[2]-256);
yabahiro 1:fe3f80c4beeb 111 } else {
yabahiro 1:fe3f80c4beeb 112 oled.locate(0,0);
yabahiro 1:fe3f80c4beeb 113 oled.printf("%2d",send[2]);
yabahiro 1:fe3f80c4beeb 114 }
yabahiro 1:fe3f80c4beeb 115 if(send[3]>250) {
yabahiro 1:fe3f80c4beeb 116 oled.locate(5,0);
yabahiro 1:fe3f80c4beeb 117 oled.printf("%d",send[3]-256);
yabahiro 1:fe3f80c4beeb 118 } else {
yabahiro 1:fe3f80c4beeb 119 oled.locate(5,0);
yabahiro 1:fe3f80c4beeb 120 oled.printf("%2d",send[3]);
yabahiro 1:fe3f80c4beeb 121 }
M_souta 0:0311bb0b38f7 122 LineDataRead(line,SENSORDATA_SIZE);
M_souta 0:0311bb0b38f7 123 SendDataMake(line,send);
M_souta 0:0311bb0b38f7 124 SendDataUpdate(send,SENDDATA_SIZE);
M_souta 0:0311bb0b38f7 125 }
M_souta 0:0311bb0b38f7 126 }
M_souta 0:0311bb0b38f7 127
yabahiro 1:fe3f80c4beeb 128 void Transmit()
yabahiro 1:fe3f80c4beeb 129 {
M_souta 0:0311bb0b38f7 130 __disable_irq();
M_souta 0:0311bb0b38f7 131 //uart.printf("%d\n\r",RS485uart.GetData());
M_souta 0:0311bb0b38f7 132 uart.putc(RS485uart.GetData());
M_souta 0:0311bb0b38f7 133 __enable_irq();
yabahiro 1:fe3f80c4beeb 134
M_souta 0:0311bb0b38f7 135 }
M_souta 0:0311bb0b38f7 136
yabahiro 1:fe3f80c4beeb 137 void SendDataUpdate(char sendData[], int dataSize)
yabahiro 1:fe3f80c4beeb 138 {
M_souta 0:0311bb0b38f7 139 __disable_irq();
M_souta 0:0311bb0b38f7 140 if(!RS485uart.InAnyData()) {
M_souta 0:0311bb0b38f7 141 RS485uart.PutData('S');
M_souta 0:0311bb0b38f7 142 for(int i = 0; i < dataSize; i++) {
M_souta 0:0311bb0b38f7 143 RS485uart.PutData(sendData[i]);
M_souta 0:0311bb0b38f7 144 }
M_souta 0:0311bb0b38f7 145 RS485uart.PutData('F');
M_souta 0:0311bb0b38f7 146 }
yabahiro 1:fe3f80c4beeb 147 __enable_irq();
M_souta 0:0311bb0b38f7 148 }
M_souta 0:0311bb0b38f7 149
yabahiro 1:fe3f80c4beeb 150 void PinSelect(int pin)
yabahiro 1:fe3f80c4beeb 151 {
M_souta 0:0311bb0b38f7 152 bool selectnum[16][4]= {
M_souta 0:0311bb0b38f7 153 {0,0,0,0},
M_souta 0:0311bb0b38f7 154 {0,0,0,1},
M_souta 0:0311bb0b38f7 155 {0,0,1,0},
M_souta 0:0311bb0b38f7 156 {0,0,1,1},
M_souta 0:0311bb0b38f7 157 {0,1,0,0},
M_souta 0:0311bb0b38f7 158 {0,1,0,1},
M_souta 0:0311bb0b38f7 159 {0,1,1,0},
M_souta 0:0311bb0b38f7 160 {0,1,1,1},
M_souta 0:0311bb0b38f7 161 {1,0,0,0},
M_souta 0:0311bb0b38f7 162 {1,0,0,1},
M_souta 0:0311bb0b38f7 163 {1,0,1,0},
M_souta 0:0311bb0b38f7 164 {1,0,1,1},
M_souta 0:0311bb0b38f7 165 {1,1,0,0},
M_souta 0:0311bb0b38f7 166 {1,1,0,1},
M_souta 0:0311bb0b38f7 167 {1,1,1,0},
M_souta 0:0311bb0b38f7 168 {1,1,1,1},
M_souta 0:0311bb0b38f7 169 };
M_souta 0:0311bb0b38f7 170 if(pin < 16) {
M_souta 0:0311bb0b38f7 171 select1[0]=selectnum[pin][3];
M_souta 0:0311bb0b38f7 172 select1[1]=selectnum[pin][2];
M_souta 0:0311bb0b38f7 173 select1[2]=selectnum[pin][1];
M_souta 0:0311bb0b38f7 174 select1[3]=selectnum[pin][0];
M_souta 0:0311bb0b38f7 175 for(int i=0; i<=3; i++) {
M_souta 0:0311bb0b38f7 176 select2[i]=0;
M_souta 0:0311bb0b38f7 177 select3[i]=0;
M_souta 0:0311bb0b38f7 178 }
M_souta 0:0311bb0b38f7 179 } else if(pin < 32) {
M_souta 0:0311bb0b38f7 180 select2[0]=selectnum[pin-16][3];
M_souta 0:0311bb0b38f7 181 select2[1]=selectnum[pin-16][2];
M_souta 0:0311bb0b38f7 182 select2[2]=selectnum[pin-16][1];
M_souta 0:0311bb0b38f7 183 select2[3]=selectnum[pin-16][0];
M_souta 0:0311bb0b38f7 184 for(int i=0; i<=3; i++) {
M_souta 0:0311bb0b38f7 185 select1[i]=0;
M_souta 0:0311bb0b38f7 186 select3[i]=0;
M_souta 0:0311bb0b38f7 187 }
M_souta 0:0311bb0b38f7 188 } else if(pin < 48) {
M_souta 0:0311bb0b38f7 189 select3[0]=selectnum[pin-32][3];
M_souta 0:0311bb0b38f7 190 select3[1]=selectnum[pin-32][2];
M_souta 0:0311bb0b38f7 191 select3[2]=selectnum[pin-32][1];
M_souta 0:0311bb0b38f7 192 select3[3]=selectnum[pin-32][0];
M_souta 0:0311bb0b38f7 193 for(int i=0; i<=3; i++) {
M_souta 0:0311bb0b38f7 194 select1[i]=0;
M_souta 0:0311bb0b38f7 195 select2[i]=0;
M_souta 0:0311bb0b38f7 196 }
M_souta 0:0311bb0b38f7 197 }
M_souta 0:0311bb0b38f7 198 }
M_souta 0:0311bb0b38f7 199
yabahiro 1:fe3f80c4beeb 200 void LineDataRead(bool sensorData[], int dataSize)
yabahiro 1:fe3f80c4beeb 201 {
M_souta 0:0311bb0b38f7 202 int pin;
yabahiro 1:fe3f80c4beeb 203 int readData = 0;
M_souta 0:0311bb0b38f7 204 for(int i = 0; i < dataSize; i++) {
M_souta 0:0311bb0b38f7 205 pin = pinDef[i];
M_souta 0:0311bb0b38f7 206 PinSelect(pin);
M_souta 0:0311bb0b38f7 207 if(pin<=15) {
M_souta 0:0311bb0b38f7 208 readData = y1.read();
M_souta 0:0311bb0b38f7 209 } else if(pin<=31) {
M_souta 0:0311bb0b38f7 210 readData = y2.read();
M_souta 0:0311bb0b38f7 211 } else if(pin<=47) {
M_souta 0:0311bb0b38f7 212 readData = y3.read();
M_souta 0:0311bb0b38f7 213 }
M_souta 0:0311bb0b38f7 214 if(readData < 0.8f) {
M_souta 0:0311bb0b38f7 215 sensorData[i] = 0;
M_souta 0:0311bb0b38f7 216 } else {
M_souta 0:0311bb0b38f7 217 sensorData[i] = 1;
M_souta 0:0311bb0b38f7 218 }
yabahiro 1:fe3f80c4beeb 219
M_souta 0:0311bb0b38f7 220 }
M_souta 0:0311bb0b38f7 221 }
M_souta 0:0311bb0b38f7 222
yabahiro 1:fe3f80c4beeb 223 void SendDataMake(bool sensorData[], char sendData[])
yabahiro 1:fe3f80c4beeb 224 {
M_souta 0:0311bb0b38f7 225 int data = 0;
M_souta 0:0311bb0b38f7 226 bool ACflag = true;
M_souta 0:0311bb0b38f7 227 bool NCflag = true;
M_souta 0:0311bb0b38f7 228 int count = 0;
M_souta 0:0311bb0b38f7 229 for(int i = 0; i < 8; i++) {
M_souta 0:0311bb0b38f7 230 NCflag = true;
M_souta 0:0311bb0b38f7 231 ACflag = true;
M_souta 0:0311bb0b38f7 232 data = 0;
M_souta 0:0311bb0b38f7 233 for(int j = 0; j < 6; j++) {
M_souta 0:0311bb0b38f7 234 data += (!sensorData[count]) * weight[j];
M_souta 0:0311bb0b38f7 235 if(sensorData[count] == 1) ACflag = false;
M_souta 0:0311bb0b38f7 236 else if(sensorData[count] == 0) NCflag = false;
M_souta 0:0311bb0b38f7 237 count++;
M_souta 0:0311bb0b38f7 238 }
yabahiro 1:fe3f80c4beeb 239 if(NCflag) sendData[i] = 99;
yabahiro 1:fe3f80c4beeb 240 else if(ACflag) sendData[i] = 98;
M_souta 0:0311bb0b38f7 241 else sendData[i] = data;
M_souta 0:0311bb0b38f7 242 }
M_souta 0:0311bb0b38f7 243 }