#include <Keypad.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define i2c_addr 0x27
#define lcd_columns 20
#define lcd_lines 4
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t colPins[COLS] = { 5, 4, 3, 2 };
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 };
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
#define dhtpin 10
#define dhttype DHT22
DHT dht(dhtpin, dhttype);
float temp;
float hum;
int servoPin = 11;
Servo myservo;
LiquidCrystal_I2C lcd(i2c_addr, lcd_columns, lcd_lines);
bool systemActive = false;
char key;
char x; //รับค่าและบันทึกไว้ว่าคือค่าอะไร แล้วเป็นลูป เมื่อกดใหม่ก็บันทึกค่าใหม่แล้วเข้าลูป
void setup() {
pinMode(12, INPUT_PULLUP);
dht.begin();
Serial.begin(9600);
lcd.init();
lcd.backlight();
myservo.attach(servoPin);
myservo.write(0);
}
void loop() {
temp = dht.readTemperature();
hum = dht.readHumidity();
key = keypad.getKey();
bool slideSwitchOn = digitalRead(12);
if (slideSwitchOn && !systemActive) {
// เมื่อเปิดสวิตช์เลื่อนและระบบยังไม่เปิดใช้งาน
systemActive = true; // เปิดใช้งานระบบ
lcd.setBacklight(HIGH); // เปิดไฟ LCD backlight
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(hum);
lcd.print(" %");
if (systemActive) {
// ระบบถูกเปิดใช้งาน
if (x == '1'||key=='1') {
if(key!=NO_KEY)x=key;
lcd.setCursor(0, 2);
lcd.print("[ Xerophyte ]");
if (hum < 15) {
myservo.write(90);
delay(5000);
myservo.write(0);
}
delay(1000);
} else if (x == '2'||key=='2') {
if(key!=NO_KEY)x=key;
lcd.setCursor(0, 2);
lcd.print("[ Mesophyte ]");
if (hum < 45) {
myservo.write(90);
delay(10000);
myservo.write(0);
}
delay(1000);
}
// เช็คสถานะของสวิตช์เพื่อปิดระบบ
if (!slideSwitchOn) {
systemActive = false; // ปิดระบบ
lcd.clear();
lcd.setBacklight(LOW);
myservo.write(0); // รีเซ็ตตำแหน่งเซอร์โว
}
}
delay(1000);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
servo1:GND
servo1:V+
servo1:PWM
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
sw1:1
sw1:2
sw1:3