sparkfun / SparkFun_BME280_Arduino_Library

An Arduino library to control the BME280 humidity and pressure sensor.
https://www.sparkfun.com/products/14348
Other
120 stars 113 forks source link

reading pressure or humidity without temperature can result incorrect results #39

Closed pbolduc closed 3 years ago

pbolduc commented 5 years ago

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.

santaimpersonator commented 4 years ago

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.

cdonate commented 3 years ago

I've created a PR for this feature. I'm not a C++ guy, so please, check and make any changes you think are necessary. All measurements are read, I don't know if this would be a problem.

50

nseidle commented 3 years ago

Thanks @cdonate. Will be in next release.