Sensor module for temperature, air pressure, and humidity
Dependencies: DHT11 LM75B mpl115a2
SensorModule.cpp
- Committer:
- yukari_hinata
- Date:
- 2015-02-19
- Revision:
- 4:f37a8d2673cc
- Parent:
- 3:c1c2c7c5fe82
File content as of revision 4:f37a8d2673cc:
#include "SensorModule.hpp" // コンストラクタ SensorModule::SensorModule(int n_sample) { // サンプリング回数, インスタンス初期化 this->n_sample = n_sample; this->temperture_sensor = new AnalogIn(p15); this->humidity_sensor = new DHT11(p11); this->pressure_i2c = new I2C(p9, p10); this->pressure_sensor = new MPL115A2(pressure_i2c); pressure_sensor->begin(); // デフォルト値をセットしとく new_temperture = 10; new_pressure = 1000; new_humidity = 40; } // デストラクタ SensorModule::~SensorModule(void) { delete temperture_sensor; delete humidity_sensor; delete pressure_i2c; delete pressure_sensor; } // 全センサーから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; 気圧センサ, 実は温度も測れる(<-LEDで明らかに熱そうなので廃止.) pressure_sensor->ReadSensor(); fail_count = 0; while(1) { if (fail_count >= 5) { fprintf( stderr, "Error in Temperaure / Pressure Sensor \r\n"); exit(1); } // AnalogInを用いる場合は,n_samle回センサーから読み出す. sum_temp = sum_pres = 0; for (int count = 0; count < n_sample; count++ ) { // LM61CIZの温度読み取り sum_temp += (temperture_sensor->read()-(0.6/3.3))/(0.01/3.3); // MPL115A2の気圧読み取り pressure_sensor->ReadSensor(); sum_pres += pressure_sensor->GetPressure(); // sum_temp2 += pressure_sensor->GetTemperature(); wait(0.05); } 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の湿度読み取り : 一発読み込み成功すれば良し. fail_count = 0; while(1) { if (fail_count >= 5) { fprintf( stderr, "Error in Humidity Sensor \r\n"); exit(1); } if (humidity_sensor->readData() == DHT11::DHT_OK) { new_humidity = float(humidity_sensor->readHumidity()); break; } else { fail_count++; } wait(0.1); } }