#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");
}