#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define I2C_ADDR 0x27
#define LCD_WIDTH 12
#define LCD_HEIGHT 6
#define MAX_CODE_LENGTH 4
const byte ROWS = 4;
const byte COLS = 4;
const char* desiredCode = "123A";
const int greenLedPin = 13;
const int redLedPin = 12;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_WIDTH, LCD_HEIGHT);
char enteredCode[MAX_CODE_LENGTH + 1];
int codeIndex = 0;
bool checkCode = false;
void displayInitialMessage() {
lcd.setCursor(0, 0);
lcd.print("Enter PIN:");
lcd.setCursor(0, 1);
lcd.print("'*' to check!");
lcd.setCursor(12, 0);
}
void setup() {
lcd.init();
lcd.backlight();
displayInitialMessage();
Serial.begin(115200);
Serial.println("Keys you pressed:\n");
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
}
void checkEnteredCode() {
enteredCode[codeIndex] = '\0';
if (strcmp(enteredCode, desiredCode) == 0) {
lcd.clear();
lcd.print("PIN is Correct!");
digitalWrite(greenLedPin, HIGH);
digitalWrite(redLedPin, LOW);
delay(3000);
digitalWrite(greenLedPin, LOW);
} else {
lcd.clear();
lcd.print("PIN is Wrong!");
digitalWrite(greenLedPin, LOW);
digitalWrite(redLedPin, HIGH);
delay(3000);
digitalWrite(redLedPin, LOW);
}
codeIndex = 0;
checkCode = false;
lcd.clear();
displayInitialMessage();
}
void loop() {
char key = keypad.getKey();
if (key != NO_KEY) {
Serial.println("Key pressed: " + String(key));
if (key == '*') {
checkCode = true;
lcd.clear();
lcd.print("Processing PIN");
delay(1500);
checkEnteredCode();
} else {
if (codeIndex < MAX_CODE_LENGTH) {
enteredCode[codeIndex++] = key;
lcd.print(key);
}
}
}
}
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
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