Skip to content

Instantly share code, notes, and snippets.

@GeorgianStan
Created March 3, 2020 19:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GeorgianStan/4815cbf7baf21928b87e47c739a35147 to your computer and use it in GitHub Desktop.
Save GeorgianStan/4815cbf7baf21928b87e47c739a35147 to your computer and use it in GitHub Desktop.
/******************************************************************************
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