#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#include <Servo.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Servo servo;
const int relayPin = 5;
// Deklarasi jumlah baris dan kolom pada keypad
const byte row = 4;
const byte col = 4;
// Deklarasi posisi karakter keypad
const char arr[row][col] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Susunan pin keypad yang terhubung dengan Arduino
const byte pinRow[row] = {13, 12, 11, 10}; // R1, R2, R3, R4
const byte pinCol[col] = {9, 8, 7, 6}; // C1, C2, C3, C4
Keypad matriks = Keypad(makeKeymap(arr), pinRow, pinCol, row, col);
String inputPassword = ""; // Inisialisasi string untuk menyimpan input password
const String password = "1234567"; // Password
void setup() {
// Inisialisasi layar OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear layar OLED
display.clearDisplay();
// Setup Servo
servo.attach(5); // Assign pin servo
servo.write(0);
// Setup Relay
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // Relay dimatikan
// Setup Serial untuk debugging
Serial.begin(9600);
}
void loop() {
char tombol = matriks.getKey();
// Memvalidasi panjang input password tidak melebihi 7 karakter
if (tombol != NO_KEY && inputPassword.length() < 7) {
inputPassword += tombol;
Serial.println(inputPassword);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Tombol yang ditekan:");
display.println(inputPassword);
display.display();
delay(1000); // Tunda 1 detik sebelum membaca input berikutnya
}
// Jika panjang input password mencapai 7 karakter, lakukan validasi
if (inputPassword.length() == 7) {
if (inputPassword == password) {
Serial.println("Password benar");
// Aksi yang ingin diambil jika password benar
servo.write(90); // Putar servo ke posisi 90 derajat
// digitalWrite(relayPin, HIGH); // Aktifkan relay
} else {
Serial.println("Password salah");
// Aksi yang ingin diambil jika password salah
}
inputPassword = ""; // Reset input password setelah validasi
}
}