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 00005 //********** pin define **********// 00006 #define SELECT1_0 PB_4 00007 #define SELECT1_1 PB_5 00008 #define SELECT1_2 PB_3 00009 #define SELECT1_3 PB_1 00010 #define SELECT2_0 PF_0 00011 #define SELECT2_1 PF_1 00012 #define SELECT2_2 PA_8 00013 #define SELECT2_3 PA_11 00014 #define SELECT3_0 PA_4 00015 #define SELECT3_1 PA_5 00016 #define SELECT3_2 PA_7 00017 #define SELECT3_3 PA_6 00018 #define Z0 PA_0 00019 #define Z1 PA_1 00020 #define Z2 PA_3 00021 #define SDA PB_7 00022 #define SCL PB_6 00023 #define UART_SE PA_2 00024 #define UARTTX PA_9 00025 #define UARTRX PA_10 00026 //********** pin define **********// 00027 00028 //********** pin select **********// 00029 AnalogIn y1(Z0); 00030 AnalogIn y2(Z1); 00031 AnalogIn y3(Z2); 00032 00033 DigitalOut select1[]= { 00034 DigitalOut(SELECT1_0), 00035 DigitalOut(SELECT1_1), 00036 DigitalOut(SELECT1_2), 00037 DigitalOut(SELECT1_3), 00038 }; 00039 DigitalOut select2[]= { 00040 DigitalOut(SELECT2_0), 00041 DigitalOut(SELECT2_1), 00042 DigitalOut(SELECT2_2), 00043 DigitalOut(SELECT2_3), 00044 }; 00045 DigitalOut select3[]= { 00046 DigitalOut(SELECT3_0), 00047 DigitalOut(SELECT3_1), 00048 DigitalOut(SELECT3_2), 00049 DigitalOut(SELECT3_3), 00050 }; 00051 00052 DigitalOut uartSE(UART_SE); 00053 00054 DigitalOut LED(LED3); 00055 00056 //pcとマイコンの通信設定[湯アートがマイコン] 00057 00058 //Serial uart(USBTX,USBRX); 00059 Serial uart(UARTTX,UARTRX); 00060 00061 I2C i2c(SDA,SCL); 00062 SO1602A oled(i2c,0x78); 00063 00064 //********** pin select **********// 00065 00066 //********** define **********// 00067 #define BUFFER_SIZE 10 00068 char RS485Data[BUFFER_SIZE]; 00069 RINGBUFFER::RingBuffer RS485uart(RS485Data,BUFFER_SIZE); 00070 00071 #define SENDDATA_SIZE 8 00072 #define SENSORDATA_SIZE 48 00073 00074 const int pinDef[48] = { 0, 1, 2, 3, 4, 5, 00075 12,13,14,15, 7, 6, 00076 22,23, 8, 9,10,11, 00077 16,17,18,19,20,21, 00078 27,26,25,24,40,41, 00079 28,29,30,31,38,39, 00080 32,33,34,35,36,37, 00081 42,43,44,45,36,47 00082 }; 00083 00084 const int weight[6] = { 2, 1, 0, 0,-1,-2}; 00085 00086 char send[SENDDATA_SIZE] = {60,77,80,55,65,68,90,87}; 00087 bool line[SENSORDATA_SIZE] = {0}; 00088 00089 void Transmit(); 00090 void PinSelect(int pin); 00091 void SendDataUpdate(char sendData[], int dataSize); 00092 void LineDataRead(bool sensorData[], int dataSize); 00093 void SendDataMake(bool sensorData[], char sendData[]); 00094 //********** define **********// 00095 00096 void InitiaLize(void) 00097 { 00098 uartSE = 1; //送信固定 00099 00100 uart.baud(9600); 00101 uart.attach(Transmit,Serial::TxIrq); 00102 } 00103 00104 int main(void) 00105 { 00106 InitiaLize(); 00107 //oled.init(); 00108 //oled.setDispFlag(true,false,false); 00109 while(1) { 00110 /* 00111 if(send[2]>250) { 00112 oled.locate(0,0); 00113 oled.printf("%d",send[2]-256); 00114 } else { 00115 oled.locate(0,0); 00116 oled.printf("%2d",send[2]); 00117 } 00118 if(send[3]>250) { 00119 oled.locate(5,0); 00120 oled.printf("%d",send[3]-256); 00121 } else { 00122 oled.locate(5,0); 00123 oled.printf("%2d",send[3]); 00124 } 00125 */ 00126 LineDataRead(line,SENSORDATA_SIZE); 00127 SendDataMake(line,send); 00128 SendDataUpdate(send,SENDDATA_SIZE); 00129 } 00130 } 00131 00132 void Transmit() 00133 { 00134 __disable_irq(); 00135 // uart.printf("%d\n\r",RS485uart.GetData()); 00136 uart.putc(RS485uart.GetData()); 00137 __enable_irq(); 00138 00139 } 00140 00141 void SendDataUpdate(char sendData[], int dataSize) 00142 { 00143 __disable_irq(); 00144 if(!RS485uart.InAnyData()) { 00145 RS485uart.PutData('S'); 00146 for(int i = 0; i < dataSize; i++) { 00147 RS485uart.PutData(sendData[i]); 00148 } 00149 RS485uart.PutData('F'); 00150 } 00151 __enable_irq(); 00152 } 00153 00154 void PinSelect(int pin) 00155 { 00156 bool selectnum[16][4]= { 00157 {0,0,0,0}, 00158 {0,0,0,1}, 00159 {0,0,1,0}, 00160 {0,0,1,1}, 00161 {0,1,0,0}, 00162 {0,1,0,1}, 00163 {0,1,1,0}, 00164 {0,1,1,1}, 00165 {1,0,0,0}, 00166 {1,0,0,1}, 00167 {1,0,1,0}, 00168 {1,0,1,1}, 00169 {1,1,0,0}, 00170 {1,1,0,1}, 00171 {1,1,1,0}, 00172 {1,1,1,1}, 00173 }; 00174 if(pin < 16) { 00175 select1[0]=selectnum[pin][3]; 00176 select1[1]=selectnum[pin][2]; 00177 select1[2]=selectnum[pin][1]; 00178 select1[3]=selectnum[pin][0]; 00179 for(int i=0; i<=3; i++) { 00180 select2[i]=0; 00181 select3[i]=0; 00182 } 00183 } else if(pin < 32) { 00184 select2[0]=selectnum[pin-16][3]; 00185 select2[1]=selectnum[pin-16][2]; 00186 select2[2]=selectnum[pin-16][1]; 00187 select2[3]=selectnum[pin-16][0]; 00188 for(int i=0; i<=3; i++) { 00189 select1[i]=0; 00190 select3[i]=0; 00191 } 00192 } else if(pin < 48) { 00193 select3[0]=selectnum[pin-32][3]; 00194 select3[1]=selectnum[pin-32][2]; 00195 select3[2]=selectnum[pin-32][1]; 00196 select3[3]=selectnum[pin-32][0]; 00197 for(int i=0; i<=3; i++) { 00198 select1[i]=0; 00199 select2[i]=0; 00200 } 00201 } 00202 } 00203 00204 void LineDataRead(bool sensorData[], int dataSize) 00205 { 00206 int pin; 00207 float readData = 0; 00208 for(int i = 0; i < dataSize; i++) { 00209 pin = pinDef[i]; 00210 PinSelect(pin); 00211 if(pin<=15) { 00212 readData = y1.read(); 00213 } else if(pin<=31) { 00214 readData = y2.read(); 00215 } else if(pin<=47) { 00216 readData = y3.read(); 00217 } 00218 //uart.printf("%f\n\r",readData); 00219 if(readData < 0.7f) { 00220 00221 sensorData[i] = 0; 00222 } else { 00223 sensorData[i] = 1; 00224 } 00225 00226 } 00227 } 00228 00229 void SendDataMake(bool sensorData[], char sendData[]) 00230 { 00231 int data = 0; 00232 bool ACflag = true; 00233 bool NCflag = true; 00234 int count = 0; 00235 for(int i = 0; i < 8; i++) { 00236 NCflag = true; 00237 ACflag = true; 00238 data = 0; 00239 for(int j = 0; j < 6; j++) { 00240 data += (!sensorData[count]) * weight[j]; 00241 if(sensorData[count] == 1) ACflag = false; 00242 else if(sensorData[count] == 0) NCflag = false; 00243 count++; 00244 } 00245 if(NCflag) sendData[i] = 99; 00246 else if(ACflag) sendData[i] = 98; 00247 else sendData[i] = data; 00248 } 00249 }
Generated on Sun Aug 28 2022 15:56:37 by
1.7.2