#include "DHTesp.h"
DHTesp dhtSensor; //deklarávia class-y DHTesp na komunikáciu s DHT22 senzorom
#define DTH_PIN 15 //vytvorenie makra pre DTH SDA pin
#define dataPin 2 //vytvorenie makra pre DS pin
#define clockPin 0 //vytvorenie makra pre SHCP pin
#define latchPin 4 //vytvorenie makra pre STCP pin
unsigned long previousMillis = 0; //deklarácia celočíselnej premennej previousMillis typu unsigned long
void setup() {
pinMode(dataPin, OUTPUT); //inicializácia pino na vysielanie signálov pre posuvný register 74HC595
pinMode(clockPin, OUTPUT); //inicializácia pino na vysielanie signálov pre posuvný register 74HC595
pinMode(latchPin, OUTPUT); //inicializácia pino na vysielanie signálov pre posuvný register 74HC595
Serial.begin(115200); //inicializácia a spustenie seriovej komunikácie
Serial.println("Hello, ESP32!"); //výpis textu na sériový monitor
dhtSensor.setup(DTH_PIN, DHTesp::DHT22); //inicializácia class-y DTHesp a nastavienie na ktorom pine je pripojený senzor DHT22
}
void loop() {
handelTemperature(dhtSensor.getTemperature()); //funkcia, ktorá zoberie hodnotu teploty a indikuje ju na LED diódach
if (millis() - previousMillis >= 1000) { //podmienka na časovanie pomocou funkcie millis()
previousMillis = millis(); //priradenie hodnoty z funkcie millis(), čas v milisekundách, kedy sa naposledy vykonala táto podmieka
writeOutValues(dhtSensor.getTemperature(), dhtSensor.getHumidity()); //funkcia, ktorá vypíše hodnoty teploty a vlhkosti na sériový movitor
}
}
void showPatternOnLED(uint8_t pattern) { //deklarácia funkcie na odoslanie informácii posuvnému registru
digitalWrite(latchPin, LOW); //nastavenie napätia na pin, ktorý vypne posuvný regisrer
shiftOut(dataPin, clockPin, MSBFIRST, pattern); //poslanie informácii na posuvný register
digitalWrite(latchPin, HIGH); //nastavenie napätia na pin, ktorý spustí posuvný register
}
void handelTemperature(float temperature) { //deklarácia funkcie na prečítanie hodnoty teploty, a následne vyslanie vzoru v binárnej hodnote pre posuvný register
uint8_t patterns[8] = {1, 2, 4, 8, 16, 32, 64, 128}; //deklarácia vzorov, ktorých binárne hodnoty sa budú posielať na posuvný register
uint8_t state = map(temperature, 20, 40, 0, 7); //uloženie výberu vzoru pre posuvný regisrer
if (temperature < 20) { //podmienka pre prípad, že teplota sa nachádza mimo daného intervalu
state = 0; //priradenie hodnoty k premennej
}
else if (temperature > 40) { //podmienka pre prípad, že teplota sa nachádza mimo daného intervalu
state = 7; //priradenie hodnoty k premennej
}
showPatternOnLED(patterns[state]); //zobrazenie vzoru na LED diódach
}
void writeOutValues(float temperature, float humidity) { //deklarácia funkcie na výpis hodnôt na sériovom monitore
Serial.println("Temperature:\t" + String(temperature) + "°C"); //výpis textu na sériový monitor
Serial.println("Humidity:\t" + String(humidity) + '%'); //výpis textu na sériový monitor
Serial.println("---"); //výpis textu na sériový monitor
}