Last active
July 21, 2022 15:19
-
-
Save fxprime/e9e982fec92f7dd46eaff757eb521c29 to your computer and use it in GitHub Desktop.
Heat-index from DHT library
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* @brief Converts Celcius to Fahrenheit | |
* @param c | |
* value in Celcius | |
* @return float value in Fahrenheit | |
*/ | |
float convertCtoF(float c) { return c * 1.8 + 32; } | |
/*! | |
* @brief Converts Fahrenheit to Celcius | |
* @param f | |
* value in Fahrenheit | |
* @return float value in Celcius | |
*/ | |
float convertFtoC(float f) { return (f - 32) * 0.55555; } | |
/*! | |
* @brief Compute Heat Index | |
* Using both Rothfusz and Steadman's equations | |
* (http://www.wpc.ncep.noaa.gov/html/heatindex_equation.shtml) | |
* @param temperature | |
* temperature in selected scale | |
* @param percentHumidity | |
* humidity in percent | |
* @param isFahrenheit | |
* true if fahrenheit, false if celcius | |
* @return float heat index | |
*/ | |
float computeHeatIndex(float temperature, float percentHumidity, | |
bool isFahrenheit) { | |
float hi; | |
if (!isFahrenheit) | |
temperature = convertCtoF(temperature); | |
hi = 0.5 * (temperature + 61.0 + ((temperature - 68.0) * 1.2) + | |
(percentHumidity * 0.094)); | |
if (hi > 79) { | |
hi = -42.379 + 2.04901523 * temperature + 10.14333127 * percentHumidity + | |
-0.22475541 * temperature * percentHumidity + | |
-0.00683783 * pow(temperature, 2) + | |
-0.05481717 * pow(percentHumidity, 2) + | |
0.00122874 * pow(temperature, 2) * percentHumidity + | |
0.00085282 * temperature * pow(percentHumidity, 2) + | |
-0.00000199 * pow(temperature, 2) * pow(percentHumidity, 2); | |
if ((percentHumidity < 13) && (temperature >= 80.0) && | |
(temperature <= 112.0)) | |
hi -= ((13.0 - percentHumidity) * 0.25) * | |
sqrt((17.0 - abs(temperature - 95.0)) * 0.05882); | |
else if ((percentHumidity > 85.0) && (temperature >= 80.0) && | |
(temperature <= 87.0)) | |
hi += ((percentHumidity - 85.0) * 0.1) * ((87.0 - temperature) * 0.2); | |
} | |
return isFahrenheit ? hi : convertFtoC(hi); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment