mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
Fixed BME680 loss of precision int math error in pressure/altitude measurements
BME680.pressure / 100 was integer division before being passed onward resulting in loss of sensor resoluiton for both altitude and pressure changes. - Changed to float math to fix the value only moving in 1hPa steps - Pressure/altitude should no longer appear "stuck" waiting to jump the next 1hPa change - Tested on RAK19003+BME680 It looks like BME280, BMP280, etc. should not be affected as their readPressure() is a float. BMP085 may have a similar problem, but I do not have one to test with.
This commit is contained in:
parent
8637a749f7
commit
96f8786538
1 changed files with 5 additions and 2 deletions
|
|
@ -357,8 +357,11 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
|
|||
if (BME680.performReading()) {
|
||||
telemetry.addTemperature(TELEM_CHANNEL_SELF, BME680.temperature);
|
||||
telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, BME680.humidity);
|
||||
telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, BME680.pressure / 100);
|
||||
telemetry.addAltitude(TELEM_CHANNEL_SELF, 44330.0 * (1.0 - pow((BME680.pressure / 100) / TELEM_BME680_SEALEVELPRESSURE_HPA, 0.1903)));
|
||||
// pressure is uint32_t Pa — use float division so hPa/altitude are not truncated to whole hPa
|
||||
const float pressure_hpa = BME680.pressure / 100.0f;
|
||||
telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, pressure_hpa);
|
||||
telemetry.addAltitude(TELEM_CHANNEL_SELF,
|
||||
44330.0f * (1.0f - powf(pressure_hpa / (float)TELEM_BME680_SEALEVELPRESSURE_HPA, 0.1903f)));
|
||||
telemetry.addAnalogInput(next_available_channel, BME680.gas_resistance);
|
||||
next_available_channel++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue