#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/sleep.h>

const int analogPin = A0; // Ganti dengan pin analog yang ingin Anda gunakan
const int sleepPin = 2;  // Ganti dengan pin keypad atau pin yang ingin Anda gunakan

const int ROW_NUM    = 4;
const int COLUMN_NUM = 4;

char keys[ROW_NUM][COLUMN_NUM] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte pin_rows[ROW_NUM] = {9, 8, 7, 6};
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2};

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);

LiquidCrystal_I2C lcd(0x27, 20, 4);  // Alamat I2C dapat berbeda, sesuaikan dengan alamat LCD Anda

void wakeUp() {
  Serial.println("Terbangun dari Deep Sleep");
}

void setup() {
  Serial.begin(9600);
  lcd.begin(20, 4);
  lcd.print("Selamat datang!");

  pinMode(analogPin, INPUT);
  pinMode(sleepPin, INPUT_PULLUP);
}

void loop() {
  int analogValue = analogRead(analogPin);
  char key = keypad.getKey();

  Serial.println(analogValue);

  if (key == 'A' || analogValue > 800) { // Ganti 'A' dengan tombol keypad yang ingin Anda gunakan
    Serial.println("Aktifkan Deep Sleep");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Aktifkan Deep Sleep");

    delay(1000);
    goToSleep();
  }

  // Tambahan kode lainnya
  delay(1000);
}

void goToSleep() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Memasuki Deep Sleep");

  Serial.println("Memasuki Deep Sleep Mode");
  delay(100);
  attachInterrupt(digitalPinToInterrupt(sleepPin), wakeUp, LOW);
  
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_cpu(); // Sleep until external interrupt wakes up
  sleep_disable();
  
  detachInterrupt(digitalPinToInterrupt(sleepPin));

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Terbangun dari Sleep");
  Serial.println("Terbangun dari Deep Sleep");
}
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
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO
ldr2:VCC
ldr2:GND
ldr2:DO
ldr2:AO
ldr3:VCC
ldr3:GND
ldr3:DO
ldr3:AO
ldr4:VCC
ldr4:GND
ldr4:DO
ldr4:AO
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL