#include "DHT.h" 
#include <LiquidCrystal.h> 
 
LiquidCrystal lcd(12,13, 14, 27, 26, 25); 
 
// Константы 
#define DHTPIN 22          // Пин подключения контакта DATA 
#define DHTTYPE DHT22      // Датчик DHT 22 
#define INTERVAL_GET_DATA 2000 // Интервал измерений, мс 
 
#define LED_TEMP_PIN 21     // Пин для светодиода температуры 
#define LED_HUMIDITY_PIN 2 // Пин для светодиода влажности 
 
// Создание экземпляра объекта DHT 
DHT dht(DHTPIN, DHTTYPE); 
 
// Переменная для интервала измерений 
unsigned long millis_int1 = 0; 
 
void setup() { 
  lcd.begin(16, 2); // Инициализация LCD 
  Serial.begin(9600); // Запуск последовательного порта 
  dht.begin(); // Запуск DHT 
 
  // Установка пинов для светодиодов как выходные 
  pinMode(LED_TEMP_PIN, OUTPUT); 
  pinMode(LED_HUMIDITY_PIN, OUTPUT); 
 
  // Изначально выключаем светодиоды 
  digitalWrite(LED_TEMP_PIN, LOW); 
  digitalWrite(LED_HUMIDITY_PIN, LOW); 
} 
 
void loop() { 
  if (millis() - millis_int1 >= INTERVAL_GET_DATA) { 
    // Получение данных с DHT22 
    float humidity = get_data_humidity(); 
    float temp = get_data_temp(); 
 
    // Вывод в монитор последовательного порта 
    Serial.print("humidity="); 
    Serial.println(humidity); 
    Serial.print("temp="); 
    Serial.println(temp); 
 
    // Вывод данных на LCD 
    lcd.clear(); // Очистка дисплея 
    lcd.setCursor(0, 0); // Установка курсора на первую строку 
    lcd.print("Humidity: "); 
    lcd.print(humidity); 
    lcd.print(" %"); 
     
    lcd.setCursor(0, 1); // Установка курсора на вторую строку 
    lcd.print("Temp: "); 
    lcd.print(temp); 
    lcd.print(" C"); 
 
    // Логика для управления светодиодами 
    if (temp < 17 || temp > 25) { 
      digitalWrite(LED_TEMP_PIN, HIGH); // Включение светодиода температуры 
    } else { 
      digitalWrite(LED_TEMP_PIN, LOW); // Выключение светодиода температуры 
    } 
 
    if (humidity < 40 || humidity > 60) { 
      digitalWrite(LED_HUMIDITY_PIN, HIGH); // Включение светодиода влажности 
    } else { 
      digitalWrite(LED_HUMIDITY_PIN, LOW); // Выключение светодиода влажности 
    } 
 
    // Запуск отсчета интервала 
    millis_int1 = millis(); 
  } 
} 
 
float get_data_humidity() { 
  return dht.readHumidity(); 
} 
 
float get_data_temp() { 
  return dht.readTemperature(); 
}