// --- Подключение библиотек ---
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// --- Настройка пинов ---
#define DHTPIN 2
#define BUZZER_PIN 8
#define LED_RED_PIN 9
#define LED_YELLOW_PIN 10
#define LED_GREEN_PIN 11
#define LIGHT_SENSOR_PIN A1
// --- Инициализация объектов ---
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHT11);
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_YELLOW_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LIGHT_SENSOR_PIN, INPUT);
lcd.setCursor(0, 0);
lcd.print("System Starting...");
delay(2000);
}
void loop() {
delay(2000); // Пауза между измерениями
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Проверка на ошибки считывания с датчика DHT
if (isnan(humidity) || isnan(temperature)) {
lcd.clear();
lcd.print("Sensor Error!");
return;
}
// --- Считывание данных с фоторезистора ---
int lightLevel = analogRead(LIGHT_SENSOR_PIN);
String lightStatus;
if (lightLevel < 200) {
lightStatus = "Dark";
} else if (lightLevel > 400) {
lightStatus = "Light";
} else {
lightStatus = "Twilight";
}
// --- Вывод данных на экран ---
lcd.clear();
// Верхняя строка: Температура и статус освещенности
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature);
lcd.print("C ");
lcd.print(lightStatus); // Выводим статус
// Нижняя строка: Влажность и точное значение освещенности
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.print(humidity);
lcd.print("% L:");
lcd.print(lightLevel);
// --- Управление светодиодами и зуммером (исправлена логика) ---
// Выключаем все перед новым циклом
digitalWrite(LED_RED_PIN, LOW);
digitalWrite(LED_YELLOW_PIN, LOW);
digitalWrite(LED_GREEN_PIN, LOW);
noTone(BUZZER_PIN); // Гарантируем выключение зуммера
if (humidity < 40.0) {
// Низкая влажность: КРАСНЫЙ + ЗВУК
digitalWrite(LED_RED_PIN, HIGH);
} else if (humidity >= 50.0) { // Условие изменено на >= для корректной работы при ровно 50%
// Высокая влажность: ЗЕЛЕНЫЙ + ЗВУК x2
digitalWrite(LED_GREEN_PIN, HIGH);
tone(BUZZER_PIN, 500);
delay(300);
noTone(BUZZER_PIN);
delay(150);
tone(BUZZER_PIN, 500);
delay(300);
noTone(BUZZER_PIN);
} else {
// Нормальная влажность (от 40.0 до <50.0): ЖЕЛТЫЙ, звука нет
digitalWrite(LED_YELLOW_PIN, HIGH);
tone(BUZZER_PIN, 500);
delay(300);
noTone(BUZZER_PIN);
// Звука здесь нет, как и планировалось в комментарии
}
}