Загрузка данных


// --- Подключение библиотек ---
#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);
    // Звука здесь нет, как и планировалось в комментарии
   }
}