#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// ตั้งค่าจอ LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // เปลี่ยนที่อยู่ I2C ถ้าจำเป็น
// ตั้งค่าขา DHT และรีเลย์
#define DHTPIN 9 // ขาที่เชื่อมต่อกับ DHT เซ็นเซอร์
#define DHTTYPE DHT22 // หรือ DHT22, DHT21
#define RELAY1 7
#define RELAY2 6
#define RELAY3 5
DHT dht(DHTPIN, DHTTYPE);
///////////////////////////////////Debounce switch pin13
const int buttonPin = 13;
const int ledPin = 3;
int ledState = 1;
int buttonState = 0;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
////////////////////////////////END Debounce switch pin13
///////////////////////////////////Debounce switch pin12
const int buttonPin1 = 12;
int ledState1 = 1;
int buttonState1 = 0;
int lastButtonState1 = LOW;
unsigned long lastDebounceTime1 = 0;
unsigned long debounceDelay1 = 50;
////////////////////////////////END Debounce switch pin12
///////////////////////////////////Debounce switch pin11
const int buttonPin2 = 11;
int ledState2 = 1;
int buttonState2 = 0;
int lastButtonState2 = LOW;
unsigned long lastDebounceTime2 = 0;
unsigned long debounceDelay2 = 50;
////////////////////////////////END Debounce switch pin11
void setup() {
// เริ่มการสื่อสารกับจอ LCD
lcd.init();
lcd.backlight();
// เริ่มการทำงานของ DHT เซ็นเซอร์
dht.begin();
// ตั้งค่าขารีเลย์เป็น OUTPUT
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
// ตั้งค่ารีเลย์ทั้งหมดเป็นปิดในตอนเริ่มต้น
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
digitalWrite(RELAY3, HIGH);
////////////////////////////////////sw1
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
///////////////////////////////////sw1
////////////////////////////////////sw2
pinMode(buttonPin1, INPUT_PULLUP);
///////////////////////////////////sw2
////////////////////////////////////sw3
pinMode(buttonPin2, INPUT_PULLUP);
///////////////////////////////////sw3
}
void loop() {
//// autofarm();
///////////////////////////SW1
int reading = digitalRead(buttonPin);/// pin13
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}
digitalWrite(ledPin, ledState);
lastButtonState = reading;
digitalWrite(RELAY1, ledState);
///////////////////////////END SW1
///////////////////////////SW2
int reading1 = digitalRead(buttonPin1);/// pin12
if (reading1 != lastButtonState1) {
lastDebounceTime1 = millis();
}
if ((millis() - lastDebounceTime1) > debounceDelay1) {
if (reading1 != buttonState1) {
buttonState1 = reading1;
if (buttonState1 == HIGH) {
ledState1 = !ledState1;
}
}
}
lastButtonState1 = reading1;
digitalWrite(RELAY2, ledState1);
///////////////////////////END SW2
///////////////////////////SW3
int reading2 = digitalRead(buttonPin2);/// pin11
if (reading2 != lastButtonState2) {
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay2) {
if (reading2 != buttonState2) {
buttonState2 = reading2;
if (buttonState2 == HIGH) {
ledState2 = !ledState2;
}
}
}
lastButtonState2 = reading2;
digitalWrite(RELAY3, ledState2);
///////////////////////////END SW3
}
//////////////////////END LOOP
void autofarm(){
// อ่านค่าความชื้นและอุณหภูมิจาก DHT เซ็นเซอร์
float h = dht.readHumidity();
float t = dht.readTemperature();
// ตรวจสอบว่ามีข้อผิดพลาดในการอ่านค่าหรือไม่
if (isnan(h) || isnan(t)) {
lcd.setCursor(0, 0);
lcd.print("Error");
return;
}
// แสดงค่าอุณหภูมิและความชื้นบนจอ LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print(" %");
// ควบคุมรีเลย์ตามค่าอุณหภูมิและความชื้น
if (t > 30) {
digitalWrite(RELAY1, LOW); // เปิดรีเลย์ 1
} else {
digitalWrite(RELAY1, HIGH); // ปิดรีเลย์ 1
}
if (h > 70) {
digitalWrite(RELAY2, LOW); // เปิดรีเลย์ 2
} else {
digitalWrite(RELAY2, HIGH); // ปิดรีเลย์ 2
}
if (t < 20) {
digitalWrite(RELAY3, LOW); // เปิดรีเลย์ 3
} else {
digitalWrite(RELAY3, HIGH); // ปิดรีเลย์ 3
}
// หน่วงเวลา 2 วินาที
delay(2000);
}