/*--- Challenge 2: Smart Password Keypad dengan Output Teks LCD dan LED
I Nengah Arnawa
IoT4-8
---*/
#include <Keypad.h> //mengambil library keypad
#include <LiquidCrystal_I2C.h> //mengambil library LCD
#define BARIS 4 //definisikan jumlah baris keypad
#define KOLOM 4 //definisikan jumlah kolom keypad
#define ledhijau 23
#define ledmerah 32
char tuts[BARIS][KOLOM] = { //tuts maksudnya tombol keypad, ini mirip matriks
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[BARIS] = {14, 12, 19, 18}; //di pin mana input baris terhubung
byte colPins[KOLOM] = {5, 4, 2, 15}; //di pin mana input kolom terhubung di esp32
//menggunakan isian dari library keypad
Keypad keypadnya = Keypad(makeKeymap(tuts), rowPins, colPins, BARIS, KOLOM);
//menggunakan isian dari librari LCD
LiquidCrystal_I2C layar(0x27, 16, 2);
//inputan user
int nomor = 0;
int sandi = 4567; //passwordnya
int kolomCursor = 0; //kolom kursor tempat mengetik ada 16
int barisCursor = 0; //baris kursor tempat mengetik hanya 0 dan 1 karena 16x2
void setup() {
layar.init(); //mungkin untuk menyiapkan Layar LCD
layar.backlight(); // untuk menghidupkan lampu latar belakang layar
pinMode(ledmerah, OUTPUT);
pinMode(ledhijau, OUTPUT);
Serial.begin(115200); // nanti saya ada menampilkan layar serial kalau tulisan penuh
}
void loop() {
char ketikan = keypadnya.getKey(); //menyuruh untuk mengambil data tuts yng ditekan
layar.setCursor(kolomCursor, barisCursor);//letakkan kursor di awal
layar.print("Password:"); //muncul ini di lcd
switch (ketikan) { //bila ada ketikan, bilamana:
case '0'...'9':
layar.setCursor(kolomCursor, barisCursor + '1'); //mulai menulis di baris berikutnya
nomor = nomor * 10 + (ketikan - '0'); //membuat nomor yang diketik muncul sebagai satuan terakhir
layar.print(nomor); //menyuruh layar mencetak ketikan tuts
break;
case '#':
if (nomor == sandi) {
layar.clear();
layar.setCursor(kolomCursor, barisCursor);
layar.print("Accepted!");
digitalWrite(ledhijau, HIGH);
Serial.println("Password BENAR");
delay(2000);
layar.clear();
nomor = 0;
}
else {
layar.clear();
layar.setCursor(kolomCursor, barisCursor);
layar.print("Access Denied!");
digitalWrite(ledmerah, HIGH);
Serial.println("Password SALAH");
delay(2000);
nomor = 0;
layar.clear();
}
break;
case'*':
nomor = 0;
layar.clear();
delay(1000);
break;
}
digitalWrite(ledmerah, LOW);
digitalWrite(ledhijau, LOW);
}