aa

Dependencies:   mbed

Committer:
yabahiro
Date:
Fri Sep 20 02:43:33 2019 +0000
Revision:
2:3459b9282009
Parent:
1:fe3f80c4beeb
Child:
3:be82925eced0
a;

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