const int buttonPin1 = 2; // Pin untuk push button 1 (bilangan biner 1)
const int buttonPin2 = 3; // Pin untuk push button 2 (bilangan biner 0)
const int ledPin[] = {4, 5, 6, 7}; // Pin untuk LED indikator (4 LED)
int pinLength = 4; // Panjang PIN
int correctPIN[] = {1, 0, 1, 0}; // PIN yang diinginkan
int enteredPIN[4]; // Array untuk menyimpan PIN yang dimasukkan
int pinIndex = 0; // Indeks untuk menyimpan PIN yang dimasukkan saat ini
void setup() {
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
for (int i = 0; i < 5; i++) {
pinMode(ledPin[i], OUTPUT);
}
Serial.begin(9600);
}
void loop() {
// Baca status tombol
int buttonState1 = digitalRead(buttonPin1);
int buttonState2 = digitalRead(buttonPin2);
// Periksa apakah tombol ditekan
if (buttonState1 == LOW) {
addDigit(1); // Tombol 1 ditekan, tambahkan digit 1
delay(200); // Debouncing
digitalWrite(ledPin[pinIndex - 1], HIGH); // Nyalakan LED sesuai digit PIN yang dimasukkan
}
if (buttonState2 == LOW) {
addDigit(0); // Tombol 0 ditekan, tambahkan digit 0
delay(200); // Debouncing
digitalWrite(ledPin[pinIndex - 1], HIGH); // Nyalakan LED sesuai digit PIN yang dimasukkan
}
// Periksa apakah PIN lengkap
if (pinIndex == pinLength) {
// Verifikasi PIN
if (checkPIN()) {
Serial.println("PIN Benar! Akses diberikan.");
for (int i = 0; i < 4; i++) {
digitalWrite(ledPin[i], LOW);
}
delay(150);
// Kedipkan LED 4, 5, 6, 7 bersamaan
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPin[i], HIGH);
}
delay(150);
for (int i = 0; i < 4; i++) {
digitalWrite(ledPin[i], LOW);
}
delay(150);
}
resetPIN(); // Reset PIN untuk permainan berikutnya
} else {
Serial.println("PIN Salah! Coba lagi.");
delay(150);
for (int i = 0; i < pinLength; i++) {
digitalWrite(ledPin[i], LOW);
}
delay(150);
for (int i = 0; i < pinLength; i++) {
digitalWrite(ledPin[i], HIGH);
}
delay(1000);
for (int i = 0; i < pinLength; i++) {
digitalWrite(ledPin[i], LOW);
}
resetPIN(); // Reset PIN jika PIN salah
}
}
}
void addDigit(int digit) {
// Tambahkan digit ke dalam array PIN yang dimasukkan
if (pinIndex < pinLength) {
enteredPIN[pinIndex] = digit;
pinIndex++;
}
}
bool checkPIN() {
// Periksa apakah PIN yang dimasukkan sama dengan PIN yang diinginkan
for (int i = 0; i < pinLength; i++) {
if (enteredPIN[i] != correctPIN[i]) {
return false; // PIN tidak sesuai
}
}
return true; // PIN sesuai
}
void resetPIN() {
// Reset array PIN yang dimasukkan dan indeks
for (int i = 0; i < pinLength; i++) {
enteredPIN[i] = 0;
}
pinIndex = 0;
}