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


// --- Подключение библиотек ---
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// --- Настройки пинов и параметров ---
#define DHTPIN 2          // Пин, к которому подключен датчик DHT11
#define DHTTYPE DHT11     // Тип датчика (DHT11 или DHT22)
#define RELAY_PIN 8       // Пин, к которому подключена кнопка
#define TEMP_THRESHOLD 27 // Порог температуры для включения реле (в градусах Цельсия)
#define  String modeText= ""         // Режим работы


// --- Инициализация объектов ---
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес I2C дисплея 0x27, 16 столбцов и 2 строки

void setup() {
  // Инициализация пинов
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH); // Для модуля с оптоизолятором: HIGH = реле ВЫКЛЮЧЕНО
  

  // Инициализация компонентов
  dht.begin();
  lcd.init();
  lcd.backlight();

  // Начальное сообщение на экране
  lcd.setCursor(0, 0);
  lcd.print("Starting...");
}

void loop() {
  // Задержка для стабильного чтения с датчика DHT11
  delay(2000);

  // Чтение данных с датчика
  float temperature = dht.readTemperature(); // Температура в градусах Цельсия
  float humidity = dht.readHumidity();       // Влажность в процентах

  // Проверка, удалось ли считать данные
  if (isnan(temperature) || isnan(humidity)) {
    lcd.setCursor(0, 0);
    lcd.print("Sensor Error");
    return; // Останавливаем выполнение loop() и пробуем снова через 2 секунды
  // Управления кнопкой
  
    
  }

  // --- Логика управления увлажнителем ---

  if (humidity <30) {
  digitalWrite(RELAY_PIN, HIGH);
  modeText = "MODE 1";
       
  }
  else if (humidity ,50) {digitalWrite(RELAY_PIN, HIGH);
  modeText = "MODE 2";
  }
  else {
     digitalWrite(RELAY_PIN, LOW);
     modeText = "OFF";
  }
  

  // --- Вывод информации на дисплей ---

  // Строка 1: Температура и статус режима
  lcd.setCursor(0, 0);
  lcd.print("T:");
  lcd.print(temperature, 1); // Выводим температуру с одним знаком после запятой
  lcd.print((char)223);      // Символ градуса (°)
  lcd.print("C ");
  
  // Строка 2: Влажность и фактическое состояние пина (для отладки)
  lcd.setCursor(0, 1);
  lcd.print("H:");
  lcd.print(humidity, 0);    // Выводим влажность без знаков после запятой
  lcd.print("% ");
}

// Вспомогательная функция для обновления статуса реле на экране
void updateRelayStatus(bool isOn) {
   lcd.setCursor(0,1); // Устанавливаем курсор в конец первой строки
   lcd.print(modeText);
   lcd.print("    ");
   }