waaaa

Dependencies:   mbed

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?

UserRevisionLine numberNew 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