#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