Sensor module for temperature, air pressure, and humidity

Dependencies:   DHT11 LM75B mpl115a2

Dependents:   WeatherPredictor

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
+}