#include "DHT.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
// Константы
#define DHTPIN 22 // Пин подключения контакта DATA
#define DHTTYPE DHT22 // Датчик DHT 22
#define INTERVAL_GET_DATA 2000 // Интервал измерений, мс
#define LED_TEMP_PIN 2 // Пин для светодиода температуры
#define LED_HUMIDITY_PIN 3 // Пин для светодиода влажности
// Создание экземпляра объекта 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();
}