三浦 颯太
/
MainBoard2019_LineHub_ver2
waaaa
main.cpp@1:9b6f10b4bc71, 2019-11-07 (annotated)
- Committer:
- M_souta
- Date:
- Thu Nov 07 11:15:29 2019 +0000
- Revision:
- 1:9b6f10b4bc71
- Parent:
- 0:cb29cf2767cd
ver2.0.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
M_souta | 0:cb29cf2767cd | 1 | #include "mbed.h" |
M_souta | 0:cb29cf2767cd | 2 | #include "RingBuffer.h" |
M_souta | 0:cb29cf2767cd | 3 | #include "SO1602A.h" |
M_souta | 0:cb29cf2767cd | 4 | #include "setup.h" |
M_souta | 0:cb29cf2767cd | 5 | |
M_souta | 0:cb29cf2767cd | 6 | // ---------- ピン設定 ---------- // |
M_souta | 0:cb29cf2767cd | 7 | AnalogIn y1(Z0); |
M_souta | 0:cb29cf2767cd | 8 | AnalogIn y2(Z1); |
M_souta | 0:cb29cf2767cd | 9 | AnalogIn y3(Z2); |
M_souta | 0:cb29cf2767cd | 10 | |
M_souta | 0:cb29cf2767cd | 11 | DigitalOut select1[]= { |
M_souta | 0:cb29cf2767cd | 12 | DigitalOut(SELECT1_0), |
M_souta | 0:cb29cf2767cd | 13 | DigitalOut(SELECT1_1), |
M_souta | 0:cb29cf2767cd | 14 | DigitalOut(SELECT1_2), |
M_souta | 0:cb29cf2767cd | 15 | DigitalOut(SELECT1_3), |
M_souta | 0:cb29cf2767cd | 16 | }; |
M_souta | 0:cb29cf2767cd | 17 | DigitalOut select2[]= { |
M_souta | 0:cb29cf2767cd | 18 | DigitalOut(SELECT2_0), |
M_souta | 0:cb29cf2767cd | 19 | DigitalOut(SELECT2_1), |
M_souta | 0:cb29cf2767cd | 20 | DigitalOut(SELECT2_2), |
M_souta | 0:cb29cf2767cd | 21 | DigitalOut(SELECT2_3), |
M_souta | 0:cb29cf2767cd | 22 | }; |
M_souta | 0:cb29cf2767cd | 23 | DigitalOut select3[]= { |
M_souta | 0:cb29cf2767cd | 24 | DigitalOut(SELECT3_0), |
M_souta | 0:cb29cf2767cd | 25 | DigitalOut(SELECT3_1), |
M_souta | 0:cb29cf2767cd | 26 | DigitalOut(SELECT3_2), |
M_souta | 0:cb29cf2767cd | 27 | DigitalOut(SELECT3_3), |
M_souta | 0:cb29cf2767cd | 28 | }; |
M_souta | 0:cb29cf2767cd | 29 | DigitalOut uartSE(UART_SE); |
M_souta | 0:cb29cf2767cd | 30 | DigitalOut LED(LED3); |
M_souta | 0:cb29cf2767cd | 31 | //Serial uart(USBTX,USBRX); // パソコン用 |
M_souta | 0:cb29cf2767cd | 32 | Serial uart(UARTTX,UARTRX); |
M_souta | 0:cb29cf2767cd | 33 | |
M_souta | 0:cb29cf2767cd | 34 | I2C i2c(SDA,SCL); |
M_souta | 0:cb29cf2767cd | 35 | SO1602A oled(i2c,0x78); |
M_souta | 0:cb29cf2767cd | 36 | |
M_souta | 0:cb29cf2767cd | 37 | // ------------------------------- // |
M_souta | 0:cb29cf2767cd | 38 | |
M_souta | 0:cb29cf2767cd | 39 | typedef union { |
M_souta | 0:cb29cf2767cd | 40 | struct { |
M_souta | 0:cb29cf2767cd | 41 | int s0 : 1; |
M_souta | 0:cb29cf2767cd | 42 | int s1 : 1; |
M_souta | 0:cb29cf2767cd | 43 | int s2 : 1; |
M_souta | 0:cb29cf2767cd | 44 | int s3 : 1; |
M_souta | 0:cb29cf2767cd | 45 | int : 4; |
M_souta | 0:cb29cf2767cd | 46 | }; |
M_souta | 0:cb29cf2767cd | 47 | uint8_t all; |
M_souta | 0:cb29cf2767cd | 48 | } MP_Channel; |
M_souta | 0:cb29cf2767cd | 49 | |
M_souta | 0:cb29cf2767cd | 50 | #define BUFFER_SIZE 10 |
M_souta | 0:cb29cf2767cd | 51 | char RS485Data[BUFFER_SIZE]; |
M_souta | 0:cb29cf2767cd | 52 | RINGBUFFER::RingBuffer RS485uart(RS485Data,BUFFER_SIZE); |
M_souta | 0:cb29cf2767cd | 53 | |
M_souta | 0:cb29cf2767cd | 54 | static bool port_select[PORT_NUM] = {PORT_0,PORT_1,PORT_2,PORT_3,PORT_4,PORT_5,PORT_6,PORT_7}; |
M_souta | 0:cb29cf2767cd | 55 | |
M_souta | 0:cb29cf2767cd | 56 | int read_data = 0; |
M_souta | 0:cb29cf2767cd | 57 | char send_data[PORT_NUM] = {0}; |
M_souta | 0:cb29cf2767cd | 58 | bool ACflag = true; |
M_souta | 0:cb29cf2767cd | 59 | bool NCflag = true; |
M_souta | 0:cb29cf2767cd | 60 | |
M_souta | 0:cb29cf2767cd | 61 | void Transmit(); |
M_souta | 0:cb29cf2767cd | 62 | float SensorRead(int pin); |
M_souta | 0:cb29cf2767cd | 63 | void SendDataUpdate(char send_data_[]); |
M_souta | 0:cb29cf2767cd | 64 | |
M_souta | 0:cb29cf2767cd | 65 | int main() { |
M_souta | 0:cb29cf2767cd | 66 | |
M_souta | 0:cb29cf2767cd | 67 | uartSE = 1; //送信固定 |
M_souta | 0:cb29cf2767cd | 68 | uart.baud(BORATE); |
M_souta | 0:cb29cf2767cd | 69 | uart.attach(Transmit,Serial::TxIrq); |
M_souta | 0:cb29cf2767cd | 70 | |
M_souta | 0:cb29cf2767cd | 71 | while(1) { |
M_souta | 0:cb29cf2767cd | 72 | for(int i = 0; i < PORT_NUM; i++) { |
M_souta | 0:cb29cf2767cd | 73 | if(port_select[i] == true) { // ポートを使っていたら |
M_souta | 0:cb29cf2767cd | 74 | NCflag = true; |
M_souta | 0:cb29cf2767cd | 75 | ACflag = true; |
M_souta | 0:cb29cf2767cd | 76 | send_data[i] = 0; |
M_souta | 0:cb29cf2767cd | 77 | for(int j = 0; j < SENSOR_NUM; j++) { |
M_souta | 0:cb29cf2767cd | 78 | read_data = SensorRead(sensor_number[i][j]); |
M_souta | 0:cb29cf2767cd | 79 | send_data[i] += read_data * sensor_weight[j]; |
M_souta | 0:cb29cf2767cd | 80 | if(read_data) ACflag = false; |
M_souta | 0:cb29cf2767cd | 81 | else NCflag = false; |
M_souta | 0:cb29cf2767cd | 82 | } |
M_souta | 0:cb29cf2767cd | 83 | if(ACflag) send_data[i] = AC_WEIGHT; |
M_souta | 0:cb29cf2767cd | 84 | else if(NCflag) send_data[i] = NC_WEIGHT; |
M_souta | 0:cb29cf2767cd | 85 | } else { |
M_souta | 0:cb29cf2767cd | 86 | send_data[i] = NO_PORT; |
M_souta | 0:cb29cf2767cd | 87 | } |
M_souta | 0:cb29cf2767cd | 88 | } |
M_souta | 0:cb29cf2767cd | 89 | SendDataUpdate(send_data); |
M_souta | 0:cb29cf2767cd | 90 | } |
M_souta | 0:cb29cf2767cd | 91 | } |
M_souta | 0:cb29cf2767cd | 92 | |
M_souta | 0:cb29cf2767cd | 93 | void Transmit() { |
M_souta | 0:cb29cf2767cd | 94 | __disable_irq(); |
M_souta | 0:cb29cf2767cd | 95 | //uart.printf("%d\n\r",RS485uart.GetData()); |
M_souta | 0:cb29cf2767cd | 96 | uart.putc(RS485uart.GetData()); |
M_souta | 0:cb29cf2767cd | 97 | __enable_irq(); |
M_souta | 0:cb29cf2767cd | 98 | |
M_souta | 0:cb29cf2767cd | 99 | } |
M_souta | 0:cb29cf2767cd | 100 | |
M_souta | 0:cb29cf2767cd | 101 | void SendDataUpdate(char send_data_[]) { |
M_souta | 0:cb29cf2767cd | 102 | __disable_irq(); |
M_souta | 0:cb29cf2767cd | 103 | if(!RS485uart.InAnyData()) { |
M_souta | 0:cb29cf2767cd | 104 | RS485uart.PutData('S'); |
M_souta | 0:cb29cf2767cd | 105 | for(int i = 0; i < PORT_NUM; i++) { |
M_souta | 0:cb29cf2767cd | 106 | RS485uart.PutData(send_data_[i]); |
M_souta | 0:cb29cf2767cd | 107 | } |
M_souta | 0:cb29cf2767cd | 108 | RS485uart.PutData('F'); |
M_souta | 0:cb29cf2767cd | 109 | } |
M_souta | 0:cb29cf2767cd | 110 | __enable_irq(); |
M_souta | 0:cb29cf2767cd | 111 | } |
M_souta | 0:cb29cf2767cd | 112 | |
M_souta | 0:cb29cf2767cd | 113 | float SensorRead(int pin) { |
M_souta | 0:cb29cf2767cd | 114 | MP_Channel ch; |
M_souta | 0:cb29cf2767cd | 115 | float read_data; |
M_souta | 0:cb29cf2767cd | 116 | if(pin < 16) { |
M_souta | 0:cb29cf2767cd | 117 | ch.all = pin; |
M_souta | 0:cb29cf2767cd | 118 | select1[0] = ch.s0; |
M_souta | 0:cb29cf2767cd | 119 | select1[1] = ch.s1; |
M_souta | 0:cb29cf2767cd | 120 | select1[2] = ch.s2; |
M_souta | 0:cb29cf2767cd | 121 | select1[3] = ch.s3; |
M_souta | 0:cb29cf2767cd | 122 | wait_us(1); |
M_souta | 0:cb29cf2767cd | 123 | read_data = y1.read(); |
M_souta | 0:cb29cf2767cd | 124 | } else if(pin < 32) { |
M_souta | 0:cb29cf2767cd | 125 | ch.all = pin - 16; |
M_souta | 0:cb29cf2767cd | 126 | select2[0] = ch.s0; |
M_souta | 0:cb29cf2767cd | 127 | select2[1] = ch.s1; |
M_souta | 0:cb29cf2767cd | 128 | select2[2] = ch.s2; |
M_souta | 0:cb29cf2767cd | 129 | select2[3] = ch.s3; |
M_souta | 0:cb29cf2767cd | 130 | wait_us(1); |
M_souta | 0:cb29cf2767cd | 131 | read_data = y2.read(); |
M_souta | 0:cb29cf2767cd | 132 | } else if(pin < 48) { |
M_souta | 0:cb29cf2767cd | 133 | ch.all = pin - 32; |
M_souta | 0:cb29cf2767cd | 134 | select3[0] = ch.s0; |
M_souta | 0:cb29cf2767cd | 135 | select3[1] = ch.s1; |
M_souta | 0:cb29cf2767cd | 136 | select3[2] = ch.s2; |
M_souta | 0:cb29cf2767cd | 137 | select3[3] = ch.s3; |
M_souta | 0:cb29cf2767cd | 138 | wait_us(1); |
M_souta | 0:cb29cf2767cd | 139 | read_data = y3.read(); |
M_souta | 0:cb29cf2767cd | 140 | } else { |
M_souta | 0:cb29cf2767cd | 141 | read_data = 1.0; |
M_souta | 0:cb29cf2767cd | 142 | } |
M_souta | 0:cb29cf2767cd | 143 | return (read_data < THRESHOLD) ? 1 : 0; |
M_souta | 0:cb29cf2767cd | 144 | } |
M_souta | 0:cb29cf2767cd | 145 | |
M_souta | 0:cb29cf2767cd | 146 |