@@ -447,6 +447,40 @@ float Adafruit_BME280::readAltitude(float seaLevel) {
447
447
return 44330.0 * (1.0 - pow (atmospheric / seaLevel, 0.1903 ));
448
448
}
449
449
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
+
450
484
/* !
451
485
* Calculates the pressure at sea level (in hPa) from the specified
452
486
* altitude (in meters), and atmospheric pressure (in hPa).
0 commit comments