大季 矢花
/
MainBoard2019_LineHub11-7
aa
main.cpp@2:3459b9282009, 2019-09-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |