三浦 颯太 / Mbed 2 deprecated MainBoard2019_LineHub_ver2

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "RingBuffer.h"
00003 #include "SO1602A.h"
00004 #include "setup.h"
00005 
00006 // ---------- ピン設定 ---------- //
00007 AnalogIn y1(Z0);
00008 AnalogIn y2(Z1);
00009 AnalogIn y3(Z2);
00010 
00011 DigitalOut select1[]= {
00012     DigitalOut(SELECT1_0),
00013     DigitalOut(SELECT1_1),
00014     DigitalOut(SELECT1_2),
00015     DigitalOut(SELECT1_3),
00016 };
00017 DigitalOut select2[]= {
00018     DigitalOut(SELECT2_0),
00019     DigitalOut(SELECT2_1),
00020     DigitalOut(SELECT2_2),
00021     DigitalOut(SELECT2_3),
00022 };
00023 DigitalOut select3[]= {
00024     DigitalOut(SELECT3_0),
00025     DigitalOut(SELECT3_1),
00026     DigitalOut(SELECT3_2),
00027     DigitalOut(SELECT3_3),
00028 };
00029 DigitalOut uartSE(UART_SE);
00030 DigitalOut LED(LED3);
00031 //Serial uart(USBTX,USBRX);  // パソコン用
00032 Serial uart(UARTTX,UARTRX);
00033 
00034 I2C i2c(SDA,SCL);
00035 SO1602A oled(i2c,0x78);
00036 
00037 // ------------------------------- //
00038 
00039 typedef union {
00040     struct {
00041         int s0 : 1;
00042         int s1 : 1;
00043         int s2 : 1;
00044         int s3 : 1;
00045         int : 4;
00046     };
00047     uint8_t all;
00048 } MP_Channel;
00049 
00050 #define  BUFFER_SIZE  10
00051 char RS485Data[BUFFER_SIZE];
00052 RINGBUFFER::RingBuffer RS485uart(RS485Data,BUFFER_SIZE);
00053 
00054 static bool port_select[PORT_NUM] = {PORT_0,PORT_1,PORT_2,PORT_3,PORT_4,PORT_5,PORT_6,PORT_7};
00055                   
00056 int read_data = 0;                               
00057 char send_data[PORT_NUM] = {0};
00058 bool ACflag = true;
00059 bool NCflag = true;
00060 
00061 void Transmit();
00062 float SensorRead(int pin);
00063 void SendDataUpdate(char send_data_[]);
00064 
00065 int main() {
00066     
00067     uartSE = 1; //送信固定
00068     uart.baud(BORATE);
00069     uart.attach(Transmit,Serial::TxIrq);
00070     
00071     while(1) {
00072         for(int i = 0; i < PORT_NUM; i++) {
00073             if(port_select[i] == true) {  // ポートを使っていたら
00074                 NCflag = true;
00075                 ACflag = true;
00076                 send_data[i] = 0;
00077                 for(int j = 0; j < SENSOR_NUM; j++) {
00078                     read_data = SensorRead(sensor_number[i][j]);
00079                     send_data[i] += read_data * sensor_weight[j];
00080                     if(read_data) ACflag = false;
00081                     else NCflag = false;
00082                 }
00083                 if(ACflag) send_data[i] = AC_WEIGHT;
00084                 else if(NCflag) send_data[i] = NC_WEIGHT;
00085             } else {
00086                 send_data[i] = NO_PORT;
00087             }
00088         }
00089         SendDataUpdate(send_data);
00090     }
00091 }
00092 
00093 void Transmit() {
00094     __disable_irq();
00095     //uart.printf("%d\n\r",RS485uart.GetData());
00096     uart.putc(RS485uart.GetData());
00097     __enable_irq();
00098     
00099 }
00100 
00101 void SendDataUpdate(char send_data_[]) {
00102     __disable_irq();
00103     if(!RS485uart.InAnyData()) {
00104         RS485uart.PutData('S');
00105         for(int i = 0; i < PORT_NUM; i++) {
00106             RS485uart.PutData(send_data_[i]);
00107         }
00108         RS485uart.PutData('F');
00109     }
00110      __enable_irq();
00111 }
00112 
00113 float SensorRead(int pin) {
00114     MP_Channel ch;
00115     float read_data;
00116     if(pin < 16) {
00117         ch.all = pin;
00118         select1[0] = ch.s0;
00119         select1[1] = ch.s1;
00120         select1[2] = ch.s2;
00121         select1[3] = ch.s3;
00122         wait_us(1);
00123         read_data = y1.read();
00124     } else if(pin < 32) {
00125         ch.all = pin - 16;
00126         select2[0] = ch.s0;
00127         select2[1] = ch.s1;
00128         select2[2] = ch.s2;
00129         select2[3] = ch.s3;
00130         wait_us(1);
00131         read_data = y2.read();
00132     } else if(pin < 48) { 
00133         ch.all = pin - 32;
00134         select3[0] = ch.s0;
00135         select3[1] = ch.s1;
00136         select3[2] = ch.s2;
00137         select3[3] = ch.s3;
00138         wait_us(1);
00139         read_data = y3.read();
00140     } else {
00141         read_data = 1.0;
00142     }
00143     return (read_data < THRESHOLD) ? 1 : 0;
00144 }
00145 
00146