Skip to content

Commit bed8e27

Browse files
committed
Add HeatIndexmethod
1 parent 427d80d commit bed8e27

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

Adafruit_BME280.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,40 @@ float Adafruit_BME280::readAltitude(float seaLevel) {
447447
return 44330.0 * (1.0 - pow(atmospheric / seaLevel, 0.1903));
448448
}
449449

450+
/*!
451+
* Computes Heat Index based on https://byjus.com/heat-index-formula/
452+
*
453+
* @param isCelcius - if true return Heat Index in degrees celcius else return in Farenheit
454+
*/
455+
float Adafruit_BME280::readHeatIndex(bool isCelcius){
456+
float tempF = readTemperature() * 1.8 + 32;
457+
float humidity = readHumidity();
458+
float hi = 0.5 * (tempF + 61.0 + ((tempF - 68.0) * 1.2) + (humidity * 0.094));
459+
460+
if (hi > 79) {
461+
hi = -42.379 + 2.04901523 * tempF + 10.14333127 * humidity +
462+
-0.22475541 * tempF * humidity +
463+
-0.00683783 * pow(tempF, 2) +
464+
-0.05481717 * pow(humidity, 2) +
465+
0.00122874 * pow(tempF, 2) * humidity +
466+
0.00085282 * tempF * pow(humidity, 2) +
467+
-0.00000199 * pow(tempF, 2) * pow(humidity, 2);
468+
469+
if ((humidity < 13) && (tempF >= 80.0) &&
470+
(tempF <= 112.0))
471+
hi -= ((13.0 - humidity) * 0.25) *
472+
sqrt((17.0 - abs(tempF - 95.0)) * 0.05882);
473+
474+
else if ((humidity > 85.0) && (tempF >= 80.0) &&
475+
(tempF <= 87.0))
476+
hi += ((humidity - 85.0) * 0.1) * ((87.0 - tempF) * 0.2);
477+
}
478+
479+
if(isCelcius) return (hi - 32) * 0.5556; //convert back to celcius
480+
else return hi;
481+
482+
}
483+
450484
/*!
451485
* Calculates the pressure at sea level (in hPa) from the specified
452486
* altitude (in meters), and atmospheric pressure (in hPa).

Adafruit_BME280.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ class Adafruit_BME280 {
229229
float readTemperature(void);
230230
float readPressure(void);
231231
float readHumidity(void);
232+
float readHeatIndex(bool isCelcius);
233+
232234

233235
float readAltitude(float seaLevel);
234236
float seaLevelForAltitude(float altitude, float pressure);

0 commit comments

Comments
 (0)