reading pressure or humidity without temperature can result incorrect results
pbolduc opened this issue · 3 comments
The readings for the humidity and pressure can be off because they depend on the temperature reading. There is a instance variable t_fine that both humidity and pressure reference. It is only initialized in when reading the temperature. This fact should be documented.
I propose adding a single method that reads all three measurements in a single call to the sensor. In my measurements on a Moteino M0, the time required to read temperature, humidity and pressure can be reduced by about 35% (1139 us vs 1729 us). Reading all values in a single call ensures the sensor values are all from the same measurement.
My first prototype looks like this. However, I am thinking on changing this a bit to align it better with the style of BME280 class with various methods (ie temperature in C / F, altitude in meters / feet). Thoughts?
struct BME280_SensorMeasurements
{
public:
float temperature;
float pressure;
float humidity;
};
class BME280
{
public:
void read(BME280_SensorMeasurements *measurements);
}edit: fixed units from ns to us.
Thanks for the assist on the other issue. I think your suggestion is valid and convenient if users could specify the measurements they wanted (though, I'm not sure if that the best approach).
If you submit a pull request, I'd be happy to verify it on a few boards.