/*--- 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);
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
led1:A
led1:C
led2:A
led2:C
r1:1
r1:2
r2:1
r2:2