#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
// Константы
#define DHTPIN 22 // Пин подключения контакта DATA
#define DHTTYPE DHT22 // Датчик DHT 22
#define INTERVAL_GET_DATA 2000 // Интервал измерений, мс
// Пины для светодиодов
#define LED_TEMP_PIN 8 // Пин для светодиода температуры
#define LED_HUMIDITY_PIN 9 // Пин для светодиода влажности
// Создание экземпляра объекта DHT
DHT dht(DHTPIN, DHTTYPE);
// Создание экземпляра LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес I2C 0x27, 16 символов, 2 строки
// Переменная для интервала измерений
unsigned long millis_int1 = 0;
void setup() {
Serial.begin(9600); // Запуск последовательного порта
dht.begin(); // Запуск DHT
lcd.begin(16, 2); // Инициализация LCD с указанием количества столбцов и строк
lcd.backlight(); // Включение подсветки
// Настройка пинов для светодиодов
pinMode(LED_TEMP_PIN, OUTPUT);
pinMode(LED_HUMIDITY_PIN, OUTPUT);
}
void loop() {
if (millis() - millis_int1 >= INTERVAL_GET_DATA) {
// Получение данных с DHT22
int humidity = get_data_humidity();
int temperature = get_data_temperature();
// Вывод в монитор последовательного порта
Serial.print("humidity=");
Serial.println(humidity);
Serial.print("temperature=");
Serial.println(temperature);
// Вывод на LCD
lcd.clear(); // Очистка экрана
lcd.setCursor(0, 0); // Установка курсора на первую строку
lcd.print("H: "); // Вывод текста
lcd.print(humidity); // Вывод влажности
lcd.print("%"); // Символ процента
lcd.setCursor(0, 1); // Установка курсора на вторую строку
lcd.print("T: "); // Вывод текста
lcd.print(temperature); // Вывод температуры
lcd.print("C"); // Символ градуса
// Управление светодиодами
if (temperature < 18 || temperature > 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();
}
}
int get_data_humidity() {
int h = dht.readHumidity(); // Получение влажности
return h;
}
int get_data_temperature() {
int t = dht.readTemperature(); // Получение температуры
return t;
}