@@ -88,23 +88,17 @@ float DHT::readHumidity(bool force) {
88
88
89
89
// boolean isFahrenheit: True == Fahrenheit; False == Celcius
90
90
float DHT::computeHeatIndex (float temperature, float percentHumidity, bool isFahrenheit) {
91
- // Adapted from equation at: https://github.com/adafruit/DHT-sensor-library/issues/9 and
92
- // Wikipedia: http://en.wikipedia.org/wiki/Heat_index
93
- if (!isFahrenheit) {
94
- // Celsius heat index calculation.
95
- return -8.784695 +
96
- 1.61139411 * temperature +
97
- 2.338549 * percentHumidity +
98
- -0.14611605 * temperature*percentHumidity +
99
- -0.01230809 * pow (temperature, 2 ) +
100
- -0.01642482 * pow (percentHumidity, 2 ) +
101
- 0.00221173 * pow (temperature, 2 ) * percentHumidity +
102
- 0.00072546 * temperature*pow (percentHumidity, 2 ) +
103
- -0.00000358 * pow (temperature, 2 ) * pow (percentHumidity, 2 );
104
- }
105
- else {
106
- // Fahrenheit heat index calculation.
107
- return -42.379 +
91
+ // Using both Rothfusz and Steadman's equations
92
+ // http://www.wpc.ncep.noaa.gov/html/heatindex_equation.shtml
93
+ float hi;
94
+
95
+ if (!isFahrenheit)
96
+ temperature = convertCtoF (temperature);
97
+
98
+ hi = 0.5 * (temperature + 61.0 + ((temperature - 68.0 ) * 1.2 ) + (percentHumidity * 0.094 ));
99
+
100
+ if (hi > 79 ) {
101
+ hi = -42.379 +
108
102
2.04901523 * temperature +
109
103
10.14333127 * percentHumidity +
110
104
-0.22475541 * temperature*percentHumidity +
@@ -113,7 +107,15 @@ float DHT::computeHeatIndex(float temperature, float percentHumidity, bool isFah
113
107
0.00122874 * pow (temperature, 2 ) * percentHumidity +
114
108
0.00085282 * temperature*pow (percentHumidity, 2 ) +
115
109
-0.00000199 * pow (temperature, 2 ) * pow (percentHumidity, 2 );
110
+
111
+ if ((percentHumidity < 13 ) && (temperature >= 80.0 ) && (temperature <= 112.0 ))
112
+ hi -= ((13.0 - percentHumidity) * 0.25 ) * sqrt ((17.0 - abs (temperature - 95.0 )) * 0.05882 );
113
+
114
+ else if ((percentHumidity > 85.0 ) && (temperature >= 80.0 ) && (temperature <= 87.0 ))
115
+ hi += ((percentHumidity - 85.0 ) * 0.1 ) * ((87.0 - temperature) * 0.2 );
116
116
}
117
+
118
+ return isFahrenheit ? hi : convertFtoC (hi);
117
119
}
118
120
119
121
boolean DHT::read (bool force) {
0 commit comments