#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);
/////////////////////////////////// fan
int ledState = HIGH;
int ledPin = 4;
int swpinfan = 10;
int statefan ;
int laststatefan = LOW;
unsigned long pretime = 0;
unsigned long interval = 50;
//////////////////////////////////// end fan
/////////////////////////////////// pump
//int ledState = HIGH;
int ledPin1 = 12;
int swpinpump = 9;
int statepump ;
int laststatepump = LOW;
//unsigned long pretime = 0;
//unsigned long interval = 50;
//////////////////////////////////// end pump
void setup() {
// เริ่มต้นการทำงานของจอ LCD
lcd.init();
lcd.backlight();
// เริ่มต้นการทำงานของ DHT
dht.begin();
Serial.begin(115200);
// ตั้งค่าขารีเลย์เป็นขาออก
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(swpinfan, INPUT_PULLUP);//////fan
pinMode(ledPin, OUTPUT);//////////////fan
pinMode(swpinpump, INPUT_PULLUP);////////pump
pinMode(ledPin1, OUTPUT);
}
void loop() {
//////////////////////////////////////////////// fan
int swfan = digitalRead(swpinfan);
if (swfan != laststatefan) {
pretime = millis();
Serial.println(pretime);
}
if ((millis() - pretime) > interval) {
if (swfan != statefan) {
statefan = swfan;
if (statefan == HIGH) {
ledState = !ledState;
}
}
}
digitalWrite(ledPin, ledState);
digitalWrite(13, ledState);
laststatefan = swfan;
//////////////////////////////////////////////// end fan
//////////////////////////////////////////////// pump
int swpump = digitalRead(swpinpump);
if (swpump != laststatepump) {
pretime = millis();
Serial.println(pretime);
}
if ((millis() - pretime) > interval) {
if (swpump != statepump) {
statepump = swpump;
if (statepump == HIGH) {
ledState = !ledState;
}
}
}
digitalWrite(ledPin, ledState);
//digitalWrite(12, ledState);
laststatefan = swfan;
//////////////////////////////////////////////// end pump
} ///////// end loop
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 () {
}