#include "DHT.h" //pouzitie kniznice na DHT senzor
#include <LiquidCrystal_I2C.h> //pouzitie kniznice na LCD displej
LiquidCrystal_I2C lcd(0x27, 16, 2); // Nastavenie I2C displeja s adresou 0x27
#define DHTPIN 12 // Pin pre DHT22
#define DHTTYPE DHT22 // Typ senzora DHT22
// Definovanie pinov pre LED
#define R_LED 13 // Červená LED
#define G_LED 10 // Zelená LED
#define Y_LED 7 // Žltá LED
#define B_LED 4 // Modrá LED
DHT dht(DHTPIN, DHTTYPE); //inicializuje objekt pre DHT senzor
// Premenné pre správu intervalu (použitie millis)
unsigned long previousMillis = 0;
const long interval = 500; // Interval medzi čítaniami (0.5 sekundy)
void setup() {
// Inicializácia pinov LED ako výstupy
pinMode(R_LED, OUTPUT);
pinMode(G_LED, OUTPUT);
pinMode(Y_LED, OUTPUT);
pinMode(B_LED, OUTPUT);
// Inicializácia sériovej komunikácie a displeja
Serial.begin(115200);
lcd.begin(16, 2); // Nastavenie LCD 16x2
lcd.init();
lcd.backlight(); // podsvietenie LCD
dht.begin(); // Inicializácia DHT senzora
}
void loop() {
unsigned long currentMillis = millis(); // Získavá aktuálny čas
// Ak uplynul interval (2 sekundy) tak
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Ulož nový čas
// Získa teplotu a vlhkosť
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Skontroluje, či sú hodnoty NaN (not a number), ak nieje cislo vyhodi chybu
if (isnan(temperature) || isnan(humidity)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Chyba pri citani");
lcd.setCursor(0, 1);
lcd.print("teploty alebo vlhkosti");
return;
}
// Vymaže vsetko na LCD a nastaví kurzor na 1. riadok
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Teplota: ");
lcd.print(temperature); // Zobrazi teplotu
lcd.print(" C");
// Nastavi kurzor na 2. riadok a zobraz vlhkosť
lcd.setCursor(0, 1);
lcd.print("Vlhkost: ");
lcd.print(humidity); // Zobrazi vlhkosť
lcd.print(" %");
// LED indikácia podľa teploty
if (temperature > 40.0) {
// Červená LED, teplota > 40°C
digitalWrite(R_LED, HIGH);
digitalWrite(G_LED, LOW);
digitalWrite(Y_LED, LOW);
} else if (temperature >= 20.0 && temperature <= 40.0) {
// Zelená LED, teplota medzi 20°C a 40°C
digitalWrite(R_LED, LOW);
digitalWrite(G_LED, HIGH);
digitalWrite(Y_LED, LOW);
} else {
// Žltá LED, teplota < 20°C
digitalWrite(R_LED, LOW);
digitalWrite(G_LED, LOW);
digitalWrite(Y_LED, HIGH);
}
// Modrá LED podľa vlhkosti
if (humidity > 50.0) {
// Modrá LED, vlhkosť > 50%
digitalWrite(B_LED, HIGH);
} else {
digitalWrite(B_LED, LOW);
}
}
}