#include <Keypad.h>
#include <LiquidCrystal_I2C.h>

const int ledMerah = 11;
const int ledHijau = 12;

char tombol[4][4] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

char* password = "1234";

byte pinBaris[] = {2, 3, 4, 5};
byte pinKolom[] = {6, 7, 8, 9};
Keypad keypad = Keypad(makeKeymap(tombol), pinBaris, pinKolom, 4, 4);
LiquidCrystal_I2C lcd(0x27, 16, 2);

int posisi = 0;
bool aksesDitolak = false;

void setup() {
  // put your setup code here, to run once:
  pinMode(ledMerah, OUTPUT);
  pinMode(ledHijau, OUTPUT);
  Serial.begin(115200);
  lcd.init();
  lcd.begin(16, 2);
  lcd.backlight();
}

void loop() {
  // put your main code here, to run repeatedly:
  char kode = keypad.getKey();
  if (kode == NO_KEY) {
    return;
  }

  lcd.clear();  // Hapus tampilan sebelumnya di LCD

  if (kode == "*" || kode == "#") {
    posisi = 0;
    aksesDitolak = false;
    return;
  }

  if (kode != password[posisi]) {
    aksesDitolak = true;
  }

  lcd.setCursor(0, 0);
  lcd.print("Input: ");
  lcd.setCursor(7, 0);
  lcd.print(kode);

  if (posisi == strlen(password) - 1) {
    if (aksesDitolak) {
      lcd.setCursor(0, 1);
      lcd.print("LED Merah ON");
      digitalWrite(ledMerah, HIGH);
      delay(4000);
      digitalWrite(ledMerah, LOW);
    } else {
      lcd.setCursor(0, 1);
      lcd.print("LED Hijau ON");
      digitalWrite(ledHijau, HIGH);
      delay(4000);
      digitalWrite(ledHijau, LOW);
    }
    aksesDitolak = false;
    posisi = 0;
    return;
  }
  posisi++;
}
$abcdeabcde151015202530fghijfghij
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led2:A
led2:C
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
led1:A
led1:C
r1:1
r1:2
r2:1
r2:2
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL