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); } 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);