From 25942ac8b97aee1bef735621fa80310b3300418d Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sat, 1 Nov 2014 12:18:47 +0100 Subject: [PATCH] Added support for Celsius in computeHeatIndex --- DHT.cpp | 28 ++++++++++++++++++++-------- DHT.h | 2 +- examples/DHTtester/DHTtester.ino | 13 ++++++++----- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/DHT.cpp b/DHT.cpp index 2ef244c..7b9dc52 100644 --- a/DHT.cpp +++ b/DHT.cpp @@ -20,7 +20,7 @@ void DHT::begin(void) { _lastreadtime = 0; } -//boolean S == Scale. True == Farenheit; False == Celcius +//boolean S == Scale. True == Fahrenheit; False == Celcius float DHT::readTemperature(bool S) { float f; @@ -76,18 +76,30 @@ float DHT::readHumidity(void) { return NAN; } -float DHT::computeHeatIndex(float tempFahrenheit, float percentHumidity) { +//boolean isFahrenheit: True == Fahrenheit; False == Celcius +float DHT::computeHeatIndex(float temperature, float percentHumidity, bool isFahrenheit) { // Adapted from equation at: https://github.com/adafruit/DHT-sensor-library/issues/9 and // Wikipedia: http://en.wikipedia.org/wiki/Heat_index + if (!isFahrenheit) { + return -8.784695 + + 1.61139411 * temperature + + 2.338549 * percentHumidity + + -0.14611605 * temperature*percentHumidity + + -0.01230809 * pow(temperature, 2) + + -0.01642482 * pow(percentHumidity, 2) + + 0.00221173 * pow(temperature, 2) * percentHumidity + + 0.00072546 * temperature*pow(percentHumidity, 2) + + -0.00000358 * pow(temperature, 2) * pow(percentHumidity, 2); + } return -42.379 + - 2.04901523 * tempFahrenheit + + 2.04901523 * temperature + 10.14333127 * percentHumidity + - -0.22475541 * tempFahrenheit*percentHumidity + - -0.00683783 * pow(tempFahrenheit, 2) + + -0.22475541 * temperature*percentHumidity + + -0.00683783 * pow(temperature, 2) + -0.05481717 * pow(percentHumidity, 2) + - 0.00122874 * pow(tempFahrenheit, 2) * percentHumidity + - 0.00085282 * tempFahrenheit*pow(percentHumidity, 2) + - -0.00000199 * pow(tempFahrenheit, 2) * pow(percentHumidity, 2); + 0.00122874 * pow(temperature, 2) * percentHumidity + + 0.00085282 * temperature*pow(percentHumidity, 2) + + -0.00000199 * pow(temperature, 2) * pow(percentHumidity, 2); } diff --git a/DHT.h b/DHT.h index 5280f9c..5cc2a01 100644 --- a/DHT.h +++ b/DHT.h @@ -33,7 +33,7 @@ class DHT { float readTemperature(bool S=false); float convertCtoF(float); float convertFtoC(float); - float computeHeatIndex(float tempFahrenheit, float percentHumidity); + float computeHeatIndex(float tempFahrenheit, float percentHumidity, bool isFahrenheit=false); float readHumidity(void); boolean read(void); diff --git a/examples/DHTtester/DHTtester.ino b/examples/DHTtester/DHTtester.ino index 021107f..217b193 100644 --- a/examples/DHTtester/DHTtester.ino +++ b/examples/DHTtester/DHTtester.ino @@ -46,16 +46,17 @@ void loop() { float t = dht.readTemperature(); // Read temperature as Fahrenheit float f = dht.readTemperature(true); - + // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } - // Compute heat index - // Must send in temp in Fahrenheit! - float hi = dht.computeHeatIndex(f, h); + // Compute heat index in Celsius + float hic = dht.computeHeatIndex(t, h); + // Compute heat index in Fahrenheit + float hif = dht.computeHeatIndex(f, h, true); Serial.print("Humidity: "); Serial.print(h); @@ -66,6 +67,8 @@ void loop() { Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); - Serial.print(hi); + Serial.print(hic); + Serial.print(" *C "); + Serial.print(hif); Serial.println(" *F"); }