Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Generated on Wed Jul 13 2022 23:12:46 by
1.7.2