#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// กำหนดขาและชนิดของเซ็นเซอร์ DHT
#define DHTPIN 2
#define DHTTYPE DHT22
// กำหนดขาของรีเลย์
#define RELAY1_PIN 13
#define RELAY2_PIN 12
#define RELAY3_PIN 11
// สร้าง object ของ DHT
DHT dht(DHTPIN, DHTTYPE);
// สร้าง object ของจอ LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// กำหนดขาของ Relay
const int relayPin1 = 13;
const int relayPin2 = 12;
const int relayPin3 = 11;
// กำหนดขาของปุ่ม
const int buttonPin1 = 10;
const int buttonPin2 = 9;
const int buttonPin3 = 8;
// เก็บค่าเวลาที่กดปุ่มล่าสุด
unsigned long lastPress1 = 0;
unsigned long lastPress2 = 0;
unsigned long lastPress3 = 0;
// เวลาที่ต้องการให้ Relay ทำงาน (ms)
const unsigned long debounceDelay = 120;
void setup() {
// เริ่มต้นการทำงานของจอ LCD
lcd.init();
lcd.backlight();
// เริ่มต้นการทำงานของ DHT
dht.begin();
// ตั้งค่าขารีเลย์เป็นขาออก
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
// ปิดรีเลย์ทั้งหมดก่อน
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
}
void loop() {
// ตรวจสอบการกดปุ่มและควบคุม Relay
controlRelay(buttonPin1, relayPin1, lastPress1);
controlRelay(buttonPin2, relayPin2, lastPress2);
controlRelay(buttonPin3, relayPin3, lastPress3);
}
void controlRelay(int buttonPin, int relayPin, unsigned long &lastPress) {
// อ่านสถานะปุ่ม
int buttonState = digitalRead(buttonPin);
// ตรวจสอบว่าปุ่มถูกกดและผ่านเวลา debounce
if (buttonState == LOW && millis() - lastPress >= debounceDelay) {
// บันทึกเวลาที่กดปุ่มล่าสุด
lastPress = millis();
// สลับสถานะ Relay
digitalWrite(relayPin, !digitalRead(relayPin));
}
}
void autofarm(){
// อ่านค่าอุณหภูมิและความชื้นจาก DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
// ตรวจสอบว่าการอ่านค่าถูกต้องหรือไม่
if (isnan(h) || isnan(t)) {
lcd.setCursor(0, 0);
lcd.print("Error reading ");
lcd.setCursor(0, 1);
lcd.print("DHT22 sensor");
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 > 38) {
digitalWrite(RELAY1_PIN, HIGH); // เปิดรีเลย์ 1
} else {
digitalWrite(RELAY1_PIN, LOW); // ปิดรีเลย์ 1
}
if (h < 60) {
digitalWrite(RELAY2_PIN, HIGH); // เปิดรีเลย์ 2
} else {
digitalWrite(RELAY2_PIN, LOW); // ปิดรีเลย์ 2
}
if (t < 30) {
digitalWrite(RELAY3_PIN, HIGH); // เปิดรีเลย์ 3
} else {
digitalWrite(RELAY3_PIN, LOW); // ปิดรีเลย์ 3
}
// หน่วงเวลา 2 วินาทีก่อนอ่านค่าใหม่
delay(2000);
}
void manual(){
}