#include <Wire.h> //Fungsinya untuk menjembatani komponen yang mendukung komunikasi I2C (SDA sama SCL) I to C
#include <Keypad.h> //Libary Keypad
#include <LiquidCrystal_I2C.h> //Deklarasi Library LCD
#include <elapsedMillis.h>
#include "AESLib.h"
#include "arduino_base64.hpp"
AESLib aesLib;
elapsedSeconds TimeOut;
elapsedMillis TimeFlipFlop;
elapsedMillis PrintKondisiPintu;
//DEKLARASI PINGPIO/VARIABEL
const int ROW_NUM = 4; //Deklarasi Baris sebanyak 4 baris
const int COLUMN_NUM = 4; //Deklarasi Kolom sebanyak 4 Kolom
const int pinBuzzer = 13; //Deklarasi PIN Buzzer di pin D39
const int pinRelay = 15;
const int pinLEDHijau = 14;
const int pinLEDMerah = 12;
char key;
String input_jawaban;
String breakloop;
String PASSWORD = "123456";
String Kondisi_pintu = "PINTU TERTUTUP";
String encryptedText = "";
String decryptedText = "";
String url = "";
String TEXT_PIN_LAMA;
String TEXT_PIN_BARU;
bool stateFlipFlop = 0;
int i = 0;
//DEKLARASI KEYPAD KOLOM DAN BARIS
char keys[ROW_NUM][COLUMN_NUM] = { //Deklarasi Array untuk penataan posisi tombol pada keypad
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pin_rows[ROW_NUM] = {23, 19, 18, 5}; //Deklarasi Tombol Baris pada masing-masing PIN Arduino
byte pin_column[COLUMN_NUM] = {17, 16, 4, 2}; //Deklarasi Tombol Kolom pada masing-masing PIN Arduino
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); //Deklarasi Keypad
LiquidCrystal_I2C lcd(0x27, 16, 2); //Deklarasi LCD
void setup() { //Body program yang di eksekusi 1 kali saja ketika awal booting arduino
Serial.begin(9600); //Deklarasi memulai komunikasi serial
input_jawaban.reserve(32); //Deklarasi Kapasitas Input Password sebesar 32 bit
pinMode(pinBuzzer, OUTPUT);
pinMode(pinRelay, OUTPUT);
pinMode(pinLEDHijau, OUTPUT);
pinMode(pinLEDMerah, OUTPUT);
/*INISIALISASI LCD*/
lcd.init(); //Deklarasi LCD untuk memulai LCD
lcd.clear(); //Membersihkan Layar LCD
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" WELCOME "); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" "); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" WELCOME "); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" . "); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" WELCOME "); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" ... "); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" WELCOME "); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" ..... "); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("WELCOME TO DOOR"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" LOCK SYSTEM "); //Menampilkan di LCD
delay(3000);
breakloop = "HOME";
}
void loop() { //Body Program yang dieksekusi terus menerus/looping
HOME(); //Memanggil Progam Eksekusi
}
void HOME() {
while (breakloop == "HOME") {
digitalWrite(pinRelay, LOW);
digitalWrite(pinLEDHijau, LOW);
digitalWrite(pinLEDMerah, HIGH);
if(PrintKondisiPintu > 5000){
String encryptedText = "";
String decryptedText = "";
Serial.println("STATUS PINTU : " + Kondisi_pintu);
Serial.println("TEKS ORIGINAL : " + PASSWORD);
String text2 = encrypt(PASSWORD);
Serial.println("TEKS ENKRIPSI : " + text2);
String text3 = decrypt(text2);
Serial.println("TEKS DEKRIPSI : " + text3);
Serial.println();
PrintKondisiPintu = 0;
}
if (TimeFlipFlop >= 1500) {
lcd.clear();
stateFlipFlop = !stateFlipFlop;
TimeFlipFlop = 0;
}
if(stateFlipFlop == 0){
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("TEKAN 'D' UNTUK"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("INPUT PIN... "); //Menampilkan di LCD
}
else{
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("TEKAN 'A' UNTUK"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("MERUBAH PIN... "); //Menampilkan di LCD
}
key = keypad.getKey();
if (key) { //Jika tombol ditekan
if (key == 'D') { //Jika tidak ada inputan pada keypad
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("TEKAN 'D' UNTUK"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("INPUT PIN... "); //Menampilkan di LCD
TimeOut = 0;
delay(500);
breakloop = "INPUT_PIN";
break;
}
else if (key == 'A') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MERUBAH PIN? "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("IKUTI STEP INI "); //Menampilkan "Pintu Terbuka" di LCD
delay(2000);
lcd.clear();
delay(500);
breakloop = "UBAH_PIN";
}
}
}
if (breakloop == "INPUT_PIN") {
TimeOut = 0;
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
INPUT_PIN();
}
if (breakloop == "UBAH_PIN") {
TimeOut = 0;
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
UBAH_PIN();
}
}
void UBAH_PIN() {
while (breakloop == "UBAH_PIN") {
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PIN SEBELUMNYA :"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(input_jawaban);
if ((key >= '0') && (key <= '9') && key && i < 6) {
i++;
}
if(PrintKondisiPintu > 5000){
String encryptedText = "";
String decryptedText = "";
Serial.println("STATUS PINTU : " + Kondisi_pintu);
Serial.println("TEKS ORIGINAL : " + PASSWORD);
String text2 = encrypt(PASSWORD);
Serial.println("TEKS ENKRIPSI : " + text2);
String text3 = decrypt(text2);
Serial.println("TEKS DEKRIPSI : " + text3);
Serial.println();
PrintKondisiPintu = 0;
}
key = keypad.getKey();
if (key) { //Jika tombol ditekan
if (key == '#') { //Jika tidak ada inputan pada keypad
lcd.clear(); //LCD dibersihkan
if (input_jawaban == PASSWORD) { //Jika Password Sesuai dengan password untuk membuka pintu
Serial.println("PIN SEBELUMNYA BENAR");
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PIN SEBELUMNYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("BENAR !!! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
TEXT_PIN_LAMA = input_jawaban;
input_jawaban = ""; //Mereset Jawaban
i=0;
delay(1000);
breakloop = "PIN_BARU";
break;
}
else { //Jika Password Sesuai dengan password untuk menutup pintu
Serial.println("PIN SEBELUMNYA SALAH");
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PIN SEBELUMNYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("SALAH !!! "); //Menampilkan "Pintu Terbuka" di LCD
input_jawaban = ""; //Mereset Jawaban
i=0;
delay(1500);
lcd.clear(); //LCD dibersihkan
}
}
else if (key == 'A') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == 'D') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == '*') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == 'C') { //Jika Ingin Menghapus Jawaban Tekan '#'
input_jawaban = ""; //Mereset Jawaban
i=0;
lcd.clear(); //LCD dibersihkan
}
else if (key == 'B') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("KEMBALI KE MENU "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("AWAL! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
input_jawaban = ""; //Mereset Jawaban
i=0;
delay(500);
breakloop = "HOME";
break;
}
else {
if(i <6){
input_jawaban += key; // Melakukan Input karakter baru pada keypad ketika ditekan
}
}
}
}
if (breakloop == "PIN_BARU") {
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
PIN_BARU();
}
else if (breakloop == "HOME") {
TimeOut = 0;
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
HOME();
}
}
void PIN_BARU() {
while (breakloop == "PIN_BARU") {
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PIN BARU : "); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(input_jawaban);
if ((key >= '0') && (key <= '9') && key && i < 6) {
i++;
}
if(PrintKondisiPintu > 5000){
String encryptedText = "";
String decryptedText = "";
Serial.println("STATUS PINTU : " + Kondisi_pintu);
Serial.println("TEKS ORIGINAL : " + PASSWORD);
String text2 = encrypt(PASSWORD);
Serial.println("TEKS ENKRIPSI : " + text2);
String text3 = decrypt(text2);
Serial.println("TEKS DEKRIPSI : " + text3);
Serial.println();
PrintKondisiPintu = 0;
}
key = keypad.getKey();
if (key) { //Jika tombol ditekan
if (key == '#') { //Jika tidak ada inputan pada keypad
TEXT_PIN_BARU = input_jawaban;
Serial.println("PIN BARU DISET");
Serial.println("PIN LAMA : " + TEXT_PIN_LAMA);
Serial.println("PIN BARU : " + TEXT_PIN_BARU);
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PIN BARU TELAH "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("DISIMPAN !!! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
PASSWORD = input_jawaban; //Mereset Jawaban
i=0;
delay(3000);
breakloop = "HOME";
break;
}
else if (key == 'A') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == 'D') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == '*') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == 'C') { //Jika Ingin Menghapus Jawaban Tekan '#'
input_jawaban = ""; //Mereset Jawaban
i=0;
lcd.clear(); //LCD dibersihkan
}
else if (key == 'B') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("KEMBALI KE MENU "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("AWAL! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
input_jawaban = ""; //Mereset Jawaban
i=0;
delay(500);
breakloop = "HOME";
break;
}
else {
if(i <6){
input_jawaban += key; // Melakukan Input karakter baru pada keypad ketika ditekan
}
}
}
}
if (breakloop == "PIN_BARU") {
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
PIN_BARU();
}
else if (breakloop == "HOME") {
TimeOut = 0;
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
HOME();
}
}
void INPUT_PIN() {
while (breakloop == "INPUT_PIN") {
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN PIN : "); //Menampilkan di LCD
if(PrintKondisiPintu > 5000){
String encryptedText = "";
String decryptedText = "";
Serial.println("STATUS PINTU : " + Kondisi_pintu);
Serial.println("TEKS ORIGINAL : " + PASSWORD);
String text2 = encrypt(PASSWORD);
Serial.println("TEKS ENKRIPSI : " + text2);
String text3 = decrypt(text2);
Serial.println("TEKS DEKRIPSI : " + text3);
Serial.println();
PrintKondisiPintu = 0;
}
if ((key >= '0') && (key <= '9') && key && i < 6) {
i++;
lcd.setCursor(i - 1, 1);
lcd.print("*");
}
digitalWrite(pinRelay, LOW);
digitalWrite(pinLEDHijau, LOW);
digitalWrite(pinLEDMerah, HIGH);
TimeOut;
if(TimeOut >= 60){ //Jika tidak ada tekan '*' selama 1 menit
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("KEMBALI KE MENU "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("AWAL! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
input_jawaban = ""; //Mereset Jawaban
i = 0;
delay(500);
breakloop = "HOME";
break;
}
key = keypad.getKey();
if (key) { //Jika tombol ditekan
TimeOut = 0;
if (key == '#') { //Jika tidak ada inputan pada keypad
lcd.clear(); //LCD dibersihkan
if (input_jawaban == PASSWORD) { //Jika Password Sesuai dengan password untuk membuka pintu
Kondisi_pintu = "PINTU TERBUKA";
Serial.println(Kondisi_pintu);
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PIN BENAR !!! "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
input_jawaban = ""; //Mereset Jawaban
digitalWrite(pinBuzzer, HIGH);
delay(500);
digitalWrite(pinBuzzer, LOW);
i = 0;
breakloop = "BUKA_PINTU";
break;
}
else { //Jika Password Sesuai dengan password untuk menutup pintu
digitalWrite(pinRelay, LOW);
digitalWrite(pinLEDHijau, LOW);
digitalWrite(pinLEDMerah, HIGH);
Kondisi_pintu = "PINTU TERTUTUP";
Serial.println(Kondisi_pintu);
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PIN SALAH !!! "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("MASUKAN PIN LAGI"); //Menampilkan "Pintu Terbuka" di LCD
input_jawaban = ""; //Mereset Jawaban
digitalWrite(pinBuzzer, HIGH);
delay(1500);
digitalWrite(pinBuzzer, LOW);
i = 0;
lcd.clear(); //LCD dibersihkan
}
}
else if (key == 'A') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == 'D') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == '*') { //Jika Ingin Menghapus Jawaban Tekan '#'
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("MASUKAN HANYA "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("ANGKA SAJA! "); //Menampilkan "Pintu Terbuka" di LCD
delay(1000);
lcd.clear();
}
else if (key == 'C') { //Jika Ingin Menghapus Jawaban Tekan '#'
input_jawaban = ""; //Mereset Jawaban
i = 0;
lcd.clear(); //LCD dibersihkan
}
else if (key == 'B') { //Jika Ingin Menghapus Jawaban Tekan '#'
Kondisi_pintu = "PINTU TERTUTUP";
Serial.println(Kondisi_pintu);
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("KEMBALI KE MENU "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("AWAL! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
input_jawaban = ""; //Mereset Jawaban
i = 0;
delay(500);
breakloop = "HOME";
break;
}
else {
if(i <6){
input_jawaban += key; // Melakukan Input karakter baru pada keypad ketika ditekan
}
}
}
}
if (breakloop == "BUKA_PINTU") {
TimeOut = 0;
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
BUKA_PINTU();
}
else if (breakloop == "HOME") {
TimeOut = 0;
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
HOME();
}
}
void BUKA_PINTU() {
while (breakloop == "BUKA_PINTU") {
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PINTU BERHASIL "); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("TERBUKA! "); //Menampilkan di LCD
lcd.print(input_jawaban);
digitalWrite(pinRelay, HIGH);
digitalWrite(pinLEDHijau, HIGH);
digitalWrite(pinLEDMerah, LOW);
if(PrintKondisiPintu > 5000){
String encryptedText = "";
String decryptedText = "";
Serial.println("STATUS PINTU : " + Kondisi_pintu);
Serial.println("TEKS ORIGINAL : " + PASSWORD);
String text2 = encrypt(PASSWORD);
Serial.println("TEKS ENKRIPSI : " + text2);
String text3 = decrypt(text2);
Serial.println("TEKS DEKRIPSI : " + text3);
Serial.println();
PrintKondisiPintu = 0;
}
TimeOut;
if(TimeOut >= 60){ //Jika tidak ada tekan '*' selama 1 menit
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PINTU BERHASIL "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("TERTUTUP! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
digitalWrite(pinBuzzer, HIGH);
delay(500);
digitalWrite(pinBuzzer, LOW);
breakloop = "TUTUP_PINTU";
break;
}
key = keypad.getKey();
if (key) { //Jika tombol ditekan
if (key == '*') { //Jika tidak ada inputan pada keypad
Kondisi_pintu = "PINTU TERTUTUP";
Serial.println(Kondisi_pintu);
lcd.clear(); //LCD dibersihkan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PINTU BERHASIL "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("TERTUTUP! "); //Menampilkan "Pintu Terbuka" di LCD
//Isi Program Motor Stepper Disini!
digitalWrite(pinBuzzer, HIGH);
delay(500);
digitalWrite(pinBuzzer, LOW);
breakloop = "TUTUP_PINTU";
break;
}
}
}
if (breakloop == "TUTUP_PINTU") {
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
TUTUP_PINTU();
}
}
void TUTUP_PINTU() {
while (breakloop == "TUTUP_PINTU") {
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("PINTU BERHASIL "); //Menampilkan "Password Benar!" di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("TERTUTUP! "); //Menampilkan "Pintu Terbuka" di LCD
digitalWrite(pinRelay, LOW);
digitalWrite(pinLEDHijau, LOW);
digitalWrite(pinLEDMerah, HIGH);
delay(2000);
lcd.clear(); //LCD dibersihkan
breakloop = "HOME";
break;
}
if (breakloop == "HOME") {
input_jawaban = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
HOME();
}
}
// the text encryption function
String encrypt(String inputText) {
int bytesInputLength = inputText.length() + 1;
byte bytesInput[bytesInputLength];
inputText.getBytes(bytesInput, bytesInputLength);
int outputLength = aesLib.get_cipher_length(bytesInputLength);
byte bytesEncrypted[outputLength];
byte aesKey[] = { 23, 45, 56, 67, 67, 87, 98, 12, 32, 34, 45, 56, 67, 87, 65, 5 };
byte aesIv[] = { 123, 43, 46, 89, 29, 187, 58, 213, 78, 50, 19, 106, 205, 1, 5, 7 };
aesLib.set_paddingmode((paddingMode)0);
aesLib.encrypt(bytesInput, bytesInputLength, bytesEncrypted, aesKey, 16, aesIv);
char base64EncodedOutput[base64::encodeLength(outputLength)];
base64::encode(bytesEncrypted, outputLength, base64EncodedOutput);
return String(base64EncodedOutput);
}
// the decryption function
String decrypt(String encryptedBase64Text) {
int originalBytesLength = base64::decodeLength(encryptedBase64Text.c_str());
byte encryptedBytes[originalBytesLength];
byte decryptedBytes[originalBytesLength];
base64::decode(encryptedBase64Text.c_str(), encryptedBytes);
byte aesKey[] = { 23, 45, 56, 67, 67, 87, 98, 12, 32, 34, 45, 56, 67, 87, 65, 5 };
byte aesIv[] = { 123, 43, 46, 89, 29, 187, 58, 213, 78, 50, 19, 106, 205, 1, 5, 7 };
aesLib.set_paddingmode((paddingMode)0);
aesLib.decrypt(encryptedBytes, originalBytesLength, decryptedBytes, aesKey, 16, aesIv);
String decryptedText = String((char*)decryptedBytes);
return decryptedText;
}