#include <Wire.h> // Подключение библиотеки Wire для работы с интерфейсом I2C
#include <LiquidCrystal_I2C.h> // Подключение библиотеки для работы с ЖК-экраном через интерфейс I2C
#include <DHT.h> // Подключение библиотеки для работы с датчиком температуры и влажности DHT
#include <EEPROM.h> // Подключение библиотеки для работы с энергонезависимой памятью EEPROM
#define LDR_PIN A1 // Определение пина для фоторезистора
LiquidCrystal_I2C lcd(0x27, 16, 2); // Создание объекта lcd для работы с ЖК-экраном с адресом 0x27, размером 16 символов на 2 строки
DHT dht(2, DHT22); // Создание объекта dht для работы с датчиком DHT22, подключенным к пину 2
int ledBright; // Объявление целой переменной для хранения уровня яркости светодиода
void setup() {
lcd.init(); // Инициализация ЖК-экрана
lcd.backlight(); // Включение подсветки ЖК-экрана
dht.begin(); // Инициализация датчика DHT
pinMode(13, OUTPUT); // Настройка пина 13 как выхода
pinMode(LDR_PIN, INPUT); // Настройка пина A0 как входа для фоторезистора
EEPROM.get(0, ledBright); // Чтение значения из ячейки EEPROM с адреса 0 и сохранение его в переменную ledBright
if (ledBright < 0 || ledBright > 255) {// Проверка, находится ли значение в допустимом диапазоне
ledBright = 0; // Если значение выходит за пределы диапазона, установка его в 0
}
analogWrite(13, ledBright); // Установка уровня яркости светодиода на пин 13 согласно значению ledBright
}
void loop() {
float h = dht.readHumidity(); // Чтение значения влажности с датчика DHT
float t = dht.readTemperature(); // Чтение значения температуры с датчика DHT
lcd.setCursor(0, 0); // Установка курсора на первую строку, первый символ
lcd.print("Humidity: "); // Вывод текста "Humidity: "
lcd.print(h); // Вывод значения влажности
lcd.setCursor(0, 1); // Установка курсора на вторую строку, первый символ
lcd.print("Temperature: "); // Вывод текста "Temperature: "
lcd.print(t);
lcd.setCursor(0, 2);
lcd.print("Room: ");
if (analogRead(LDR_PIN) < 512) { // Чтение аналогового сигнала с фоторезистора и проверка освещенности
lcd.print("Light!"); // Если уровень света выше порога, выводим "Light!"
} else {
lcd.print("Dark "); // Иначе выводим "Dark"
}
delay(10000); // Пауза секунд
lcd.clear(); // Очистка содержимого ЖК-экрана
if (digitalRead(A1) == HIGH) { // Проверка состояния пина A1
digitalWrite(13, LOW); // Если сигнал высокий, выключаем светодиод
}
if (digitalRead(A1) == LOW) { // Проверка состояния пина A1
digitalWrite(13, HIGH); // Если сигнал низкий, включаем светодиод
}
EEPROM.put(0, ledBright); // Запись значения ledBright в ячейку EEPROM с адреса 0
}