#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define BUTTON_PIN 8
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define OFF_STATE 0
#define MODE1_STATE 1
#define MODE2_STATE 2
int currentState = OFF_STATE;
void pressButton() {
digitalWrite(BUTTON_PIN, HIGH);
delay(200);
digitalWrite(BUTTON_PIN, LOW);
delay(1000);
}
void setState(int targetState) {
if (currentState == targetState) return;
while (currentState != targetState) {
pressButton();
if (currentState == OFF_STATE) {
currentState = MODE1_STATE;
}
else if (currentState == MODE1_STATE) {
currentState = MODE2_STATE;
}
else {
currentState = OFF_STATE;
}
}
}
void setup() {
pinMode(BUTTON_PIN, OUTPUT);
digitalWrite(BUTTON_PIN, LOW);
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Humidifier");
lcd.setCursor(0, 1);
lcd.print("Starting...");
delay(2000);
lcd.clear();
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error");
delay(2000);
return;
}
// Выбор режима по влажности
if (humidity < 30) {
setState(MODE1_STATE);
}
else if (humidity < 55) {
setState(MODE2_STATE);
}
else {
setState(OFF_STATE);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1);
lcd.print((char)223);
lcd.print("C ");
lcd.print("H:");
lcd.print(humidity, 0);
lcd.print("%");
lcd.setCursor(0, 1);
if (currentState == MODE1_STATE) {
lcd.print("MODE1");
}
else if (currentState == MODE2_STATE) {
lcd.print("MODE2");
}
else {
lcd.print("OFF");
}
delay(3000);
}