Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions Adafruit_BME280.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,40 @@ float Adafruit_BME280::readAltitude(float seaLevel) {
return 44330.0 * (1.0 - pow(atmospheric / seaLevel, 0.1903));
}

/*!
* Computes Heat Index based on https://byjus.com/heat-index-formula/
* @param isCelcius - if true return Heat Index in degrees celcius else return
* in Farenheit
* @returns Heat Index in Celcius or Farenhite depending on parameter
* isCelcius
*/
float Adafruit_BME280::readHeatIndex(bool isCelcius) {
float tempF = readTemperature() * 1.8 + 32;
float humidity = readHumidity();
float hi = 0.5 * (tempF + 61.0 + ((tempF - 68.0) * 1.2) + (humidity * 0.094));

if (hi > 79) {
hi = -42.379 + 2.04901523 * tempF + 10.14333127 * humidity +
-0.22475541 * tempF * humidity + -0.00683783 * pow(tempF, 2) +
-0.05481717 * pow(humidity, 2) +
0.00122874 * pow(tempF, 2) * humidity +
0.00085282 * tempF * pow(humidity, 2) +
-0.00000199 * pow(tempF, 2) * pow(humidity, 2);

if ((humidity < 13) && (tempF >= 80.0) && (tempF <= 112.0))
hi -= ((13.0 - humidity) * 0.25) *
sqrt((17.0 - abs(tempF - 95.0)) * 0.05882);

else if ((humidity > 85.0) && (tempF >= 80.0) && (tempF <= 87.0))
hi += ((humidity - 85.0) * 0.1) * ((87.0 - tempF) * 0.2);
}

if (isCelcius)
return (hi - 32) * 0.5556; // convert back to celcius
else
return hi;
}

/*!
* Calculates the pressure at sea level (in hPa) from the specified
* altitude (in meters), and atmospheric pressure (in hPa).
Expand Down
1 change: 1 addition & 0 deletions Adafruit_BME280.h
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ class Adafruit_BME280 {
float readTemperature(void);
float readPressure(void);
float readHumidity(void);
float readHeatIndex(bool isCelcius);

float readAltitude(float seaLevel);
float seaLevelForAltitude(float altitude, float pressure);
Expand Down