Sensor module for temperature, air pressure, and humidity
Dependencies: DHT11 LM75B mpl115a2
Diff: SensorModule.cpp
- Revision:
- 2:d1f55b26ccac
- Parent:
- 1:3d6d2ff7ff8a
- Child:
- 3:c1c2c7c5fe82
--- a/SensorModule.cpp Sun Feb 15 09:27:44 2015 +0000 +++ b/SensorModule.cpp Mon Feb 16 07:53:35 2015 +0000 @@ -25,12 +25,18 @@ // 全センサーからn_sample回読み出し, 平均値で更新する. void SensorModule::read_all_sensor(void) { + int fail_count; register float sum_temp = 0, sum_humid = 0, sum_pres = 0; - // float sum_temp2 = 0; 気圧センサ, 実は温度も測れる + // float sum_temp2 = 0; 気圧センサ, 実は温度も測れる(<-LEDで明らかに熱そうなので廃止.) pressure_sensor->ReadSensor(); - - do { + + fail_count = 0; + while(1) { + if (fail_count >= 5) { + fprintf( stderr, "Error in Temperaure Sensor \r\n"); + exit(1); + } // AnalogInを用いる場合は,n_samle回センサーから読み出す. for (int count = 0; count < n_sample; count++ ) { // LM61CIZの温度読み取り @@ -41,21 +47,36 @@ // sum_temp2 += pressure_sensor->GetTemperature(); wait(0.1); } - // 異常値ならばやり直し(たま〜に異常値をとる...) - } while( fabsf(new_temperture - (sum_temp / n_sample)) > 40 ); + if ( fabsf(new_temperture - (sum_temp / n_sample)) < 40 + && fabsf(new_pressure - (sum_pres / n_sample)) < 40 ) { + break; + } else { + // 異常値ならばやり直し(たま〜に異常値をとる...) + fail_count++; + } + } + // 更新 new_temperture = sum_temp / n_sample; new_pressure = sum_pres / n_sample; - + // printf("LM61CIZ : %f vs. MPL115A2 : %f \r\n", sum_temp / n_sample, sum_temp2 / n_sample); - // 更新. - // DHT11の湿度読み取り - if (humidity_sensor->readData() != DHT11::OK) { - fprintf( stderr, "Error in Humidity Sensor \r\n"); - } else { - new_humidity = float(humidity_sensor->readHumidity()); + fail_count = 0; + while(1) { + if (fail_count >= 5) { + fprintf( stderr, "Error in Humidity Sensor \r\n"); + exit(1); + } + + if (humidity_sensor->readData() == DHT11::OK) { + new_humidity = float(humidity_sensor->readHumidity()); + break; + } else { + fail_count++; + } + wait(0.5); } -} \ No newline at end of file +}