#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define LED_PIN 3
#define RELAY_PIN 4
#define BUTTON_PIN 5
DHT dht(DHTPIN, DHTTYPE);
// Адрес обычно 0x27 или 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool lightState = false;
bool lastButtonState = HIGH;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Smart Home");
delay(2000);
lcd.clear();
}
void loop() {
float temp = dht.readTemperature();
if (isnan(temp)) {
lcd.setCursor(0, 0);
lcd.print("DHT Error ");
return;
}
// Управление реле
bool fanState = false;
if (temp > 28) {
digitalWrite(RELAY_PIN, HIGH);
fanState = true;
} else {
digitalWrite(RELAY_PIN, LOW);
fanState = false;
}
// Кнопка
bool buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW && lastButtonState == HIGH) {
lightState = !lightState;
digitalWrite(LED_PIN, lightState ? HIGH : LOW);
delay(200);
}
lastButtonState = buttonState;
// ===== Вывод на LCD =====
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("L:");
lcd.print(lightState ? "ON " : "OFF");
lcd.print(" F:");
lcd.print(fanState ? "ON " : "OFF");
delay(1000);
}