From d607ad028f4d344fd6a894a0285fbebeded70e97 Mon Sep 17 00:00:00 2001 From: jfd Date: Wed, 7 Dec 2022 19:42:42 -0800 Subject: [PATCH 1/2] support altitude in meters --- src/BARO.cpp | 12 ++++++++++++ src/BARO.h | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/BARO.cpp b/src/BARO.cpp index 23d3f30..8bfe1c9 100644 --- a/src/BARO.cpp +++ b/src/BARO.cpp @@ -93,6 +93,18 @@ float LPS22HBClass::readTemperature(void) return reading/100; } +#define PRESSURE_SEALEVEL_HPA (1013.25f) /**< Average sea level pressure is 1013.25 hPa */ +float LPS22HBClass::readAltitude(void) +{ + float atmospheric = BARO.readPressure(MILLIBAR); + /* + * The altitude in meters can be calculated + * with the international barometric formula + */ + return 44330.0 * + (1.0 - pow(atmospheric/PRESSURE_SEALEVEL_HPA, (1.0/5.255))); +} + int LPS22HBClass::i2cRead(uint8_t reg) { _wire->beginTransmission(LPS22HB_ADDRESS); diff --git a/src/BARO.h b/src/BARO.h index 6a66004..9d29ca7 100644 --- a/src/BARO.h +++ b/src/BARO.h @@ -38,7 +38,7 @@ class LPS22HBClass { float readPressure(int units = KILOPASCAL); float readTemperature(void); - + float readAltitude(void); private: int i2cRead(uint8_t reg); int i2cWrite(uint8_t reg, uint8_t val); From b3a7dd3be69600797a486747bea30a2b98495b34 Mon Sep 17 00:00:00 2001 From: jfd Date: Wed, 7 Dec 2022 19:56:07 -0800 Subject: [PATCH 2/2] update example --- examples/ReadPressure/ReadPressure.ino | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/examples/ReadPressure/ReadPressure.ino b/examples/ReadPressure/ReadPressure.ino index 00bb7c1..59294b0 100644 --- a/examples/ReadPressure/ReadPressure.ino +++ b/examples/ReadPressure/ReadPressure.ino @@ -42,6 +42,16 @@ void loop() { // print an empty line Serial.println(); + // read the sensor value + float altitude = BARO.readAltitude(); + // print the sensor value + Serial.print("Altitude = "); + Serial.print(altitude); + Serial.println(" m"); + + // print an empty line + Serial.println(); + // wait 1 second to print again delay(1000); }