Created
March 3, 2020 19:50
-
-
Save GeorgianStan/4815cbf7baf21928b87e47c739a35147 to your computer and use it in GitHub Desktop.
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
/****************************************************************************** | |
Read Temperature and Humidity | |
DHT22 Hardware Connections (Breakoutboard to ESP32): | |
OUT to GPIO 0 | |
- to GND | |
+ to 3.3V | |
******************************************************************************/ | |
// ***************************************************** | |
// ** | |
// ** INCLUDES | |
// ** | |
// ***************************************************** | |
#include <DHT.h>; | |
#include <math.h> | |
// ***************************************************** | |
// ** | |
// ** GLOBAL VARIABLES & Defines | |
// ** | |
// ***************************************************** | |
// -------------------------- DHT22 -------------------------- | |
#define NaN 0.0 / 0.0 | |
#define DHTPIN 0 // what pin we're connected to | |
#define DHTTYPE DHT22 // DHT 22 (AM2302) | |
DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino | |
struct dht22DataStruct | |
{ | |
float temperature; | |
float humidity; | |
float temperature_score; | |
float humidity_score; | |
}; | |
// levels | |
const float temperature_min_value = -40; | |
const float temperature_max_value = 80; | |
int temperature_levels[] = {0,20,22,24,30}; | |
int temperature_levels_percentage[] = {0,70,100,70,0}; | |
const float humidity_min_value = 0; | |
const float humidity_max_value = 100; | |
int humidity_levels[] = {0,30,45,55,60,80,100}; | |
int humidity_levels_percentage[] = {0,50,100,100,50,10,0}; | |
void setup() | |
{ | |
Serial.begin(115200); | |
initDHT22(); | |
} | |
void loop() | |
{ | |
struct dht22DataStruct dht22Data_instance; | |
delay(2000); | |
dht22Data_instance = readDHT22Data(); | |
// float a= 2.00; | |
// float b= 0.07; | |
// Serial.println(a/b); | |
// Serial.println("temp"); | |
// Serial.println(dht22Data_instance.temperature); | |
// Serial.println(dht22Data_instance.temperature_score); | |
// Serial.println("-"); | |
// | |
// Serial.println("hum"); | |
// Serial.println(dht22Data_instance.humidity); | |
// Serial.println(dht22Data_instance.humidity_score); | |
// Serial.println("-"); | |
} | |
// * Calculate The Score Using Some Levels for values and percentages | |
float calculateScore(uint16_t current_value, int levels_values[],int levels_percentages[], int levels_length) | |
{ | |
float output=NAN; | |
for (int i = 0; i < levels_length; i++) { | |
if (current_value <= levels_values[i]) | |
{ | |
if (i == 0) | |
{ | |
output = levels_percentages[0]; | |
break; | |
} | |
float step_value = (float)abs(levels_values[i] - levels_values[i - 1]) / abs(levels_percentages[i] - levels_percentages[i - 1]); | |
float percentage_diff = (float)abs(current_value - levels_values[i - 1]) / step_value; | |
Serial.println(step_value); | |
Serial.println(2.00/step_value); | |
Serial.println(2.00/0.07); | |
Serial.println("-"); | |
// used in case that percentage are not ordered (example for temperature when the 100 is at 22 degrees) | |
if(levels_percentages[i - 1] < levels_percentages[i]){ | |
percentage_diff = -percentage_diff; | |
} | |
output = levels_percentages[i - 1] - percentage_diff; | |
break; | |
} | |
else | |
{ | |
if (i == levels_length - 1) | |
{ | |
output = levels_percentages[levels_length-1]; | |
break; | |
} | |
} | |
} | |
return output; | |
} | |
// * Read data from DHT22 | |
struct dht22DataStruct readDHT22Data() | |
{ | |
struct dht22DataStruct dht22Data_instance; | |
dht22Data_instance.temperature = dht.readTemperature(); | |
dht22Data_instance.humidity = dht.readHumidity(); | |
if (isnan(dht22Data_instance.temperature) || isnan(dht22Data_instance.humidity)) { | |
dht22Data_instance.temperature_score=NAN; | |
dht22Data_instance.humidity_score=NAN; | |
} | |
else | |
{ | |
dht22Data_instance.temperature_score = calculateScore(dht22Data_instance.temperature,temperature_levels,temperature_levels_percentage,5); | |
// dht22Data_instance.humidity_score = calculateScore(dht22Data_instance.humidity,humidity_levels,humidity_levels_percentage,7); | |
} | |
return dht22Data_instance; | |
} | |
void initDHT22() | |
{ | |
dht.begin(); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment