大季 矢花
/
MainBoard2019_LineHub11-7
aa
main.cpp@1:fe3f80c4beeb, 2019-09-18 (annotated)
- 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?
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 | |
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 | } |