Fixed bug #75, added timeout to "takeForcedMeasurement" and a return value to check the result of the function
This commit is contained in:
kimi1991 2020-09-24 21:39:43 +02:00
parent 2046f417fd
commit cd435d16fd
2 changed files with 17 additions and 4 deletions

View File

@ -343,21 +343,34 @@ uint32_t Adafruit_BME280::read24(byte reg) {
/*!
* @brief Take a new measurement (only possible in forced mode)
@returns true in case of success else false
*/
void Adafruit_BME280::takeForcedMeasurement() {
bool Adafruit_BME280::takeForcedMeasurement() {
bool return_value = false;
// If we are in forced mode, the BME sensor goes back to sleep after each
// measurement and we need to set it to forced mode once at this point, so
// it will take the next measurement and then return to sleep again.
// In normal mode simply does new measurements periodically.
if (_measReg.mode == MODE_FORCED) {
return_value = true;
// set to forced mode, i.e. "take next measurement"
write8(BME280_REGISTER_CONTROL, _measReg.get());
// Store current time to measure the timeout
uint32_t timeout_start = millis();
// wait until measurement has been completed, otherwise we would read
// the values from the last measurement
while (read8(BME280_REGISTER_STATUS) & 0x08)
// the values from the last measurement or the timeout occurred after 2 sec.
while (read8(BME280_REGISTER_STATUS) & 0x08) {
// In case of a timeout, stop the while loop
if((millis() - timeout_start) > 2000) {
return_value = false;
break;
}
delay(1);
}
}
return return_value;
}
/*!
* @brief Reads the factory-set coefficients

View File

@ -225,7 +225,7 @@ public:
sensor_filter filter = FILTER_OFF,
standby_duration duration = STANDBY_MS_0_5);
void takeForcedMeasurement();
bool takeForcedMeasurement();
float readTemperature(void);
float readPressure(void);
float readHumidity(void);