#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
/* ===== PIN ===== */
#define DHTPIN 4
#define DHTTYPE DHT22
#define RELAY1 26
#define RELAY2 27
#define SW_MODE 18
#define SW_R1 19
#define SW_R2 23
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool modeAuto;
float temp, hum;
void setup() {
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(SW_MODE, INPUT_PULLUP);
pinMode(SW_R1, INPUT_PULLUP);
pinMode(SW_R2, INPUT_PULLUP);
// ===== Relay Active HIGH → ปิดไว้ก่อน =====
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
// กดปุ่ม = AUTO
modeAuto = (digitalRead(SW_MODE) == LOW);
temp = dht.readTemperature();
hum = dht.readHumidity();
// ป้องกัน DHT อ่านพลาด
if (isnan(temp) || isnan(hum)) {
lcd.setCursor(0, 0);
lcd.print("DHT ERROR ");
delay(2000);
return;
}
if (modeAuto) {
// ===== AUTO MODE =====
digitalWrite(RELAY1, (temp >= 30) ? LOW : HIGH);
digitalWrite(RELAY2, (hum >= 70) ? LOW: HIGH);
} else {
// ===== MANUAL MODE =====
digitalWrite(RELAY1, digitalRead(SW_R1) == LOW ? LOW: HIGH);
digitalWrite(RELAY2, digitalRead(SW_R2) == LOW ?LOW :HIGH);
}
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temp, 1);
lcd.print("C H:");
lcd.print(hum, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(modeAuto ? "MODE: AUTO " : "MODE: MANUAL ");
delay(2000);
}