Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Fatemeh Nabidoust
Published

đź”’Password lock system (my IG: @elec_astro)

This Arduino code implements a password-based system using a 4x4 keypad, a 16x2 LCD, and two LEDs (green and red).

ExpertFull instructions provided93
đź”’Password lock system (my IG: @elec_astro)

Things used in this project

Hardware components

Keypad 4x4
Ă—1
I2C 16x2 Arduino LCD Display Module
DFRobot I2C 16x2 Arduino LCD Display Module
Ă—1
5 mm LED: Red
5 mm LED: Red
Ă—1
5 mm LED: Green
5 mm LED: Green
Ă—1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Custom parts and enclosures

photo_2025-04-13_18-30-05_hkTszp7Faq.jpg

Schematics

password-based system

password-based system

password-based system

password-based system

Code

password-based system

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


LiquidCrystal_I2C lcd(0x27, 16, 2); 

ŘŻ
const byte ROWS = 4;
const byte COLS = 4;
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);


const int greenLED = 10; 
const int redLED = 11;   


String correctPassword = "1234"; 
String inputPassword = "";       

void setup() {
  Serial.begin(9600);
  

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Enter Password:");
  

  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  digitalWrite(greenLED, LOW);
  digitalWrite(redLED, LOW);
}

void loop() {
  char key = keypad.getKey();
  
  if (key != NO_KEY) {
    if (key == 'A') { 
      if (setNewCode()) {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Code Changed!");
        digitalWrite(greenLED, HIGH);
        delay(2000);
        digitalWrite(greenLED, LOW);
      }
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Enter Password:");
    } else if (key == '#') {
      checkPassword();
    } else if (key == '*') { 
      inputPassword = "";
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Enter Password:");
    } else { 
      inputPassword += key;
      lcd.setCursor(0, 1);
      lcd.print(inputPassword);
    }
  }
}

String inputSecretCode() {
  String code = "";
  while (true) {
    char key = keypad.getKey();
    if (key != NO_KEY) {
      if (key == '#') { 
        return code;
      } else if (key == '*') {
        code = "";
        lcd.setCursor(0, 1);
        lcd.print("                ");
        lcd.setCursor(0, 1);
      } else {
        code += key;
        lcd.setCursor(0, 1);
        lcd.print(code);
      }
    }
  }
}

bool setNewCode() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Enter new code:");
  String newCode = inputSecretCode();

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Confirm new code");
  String confirmCode = inputSecretCode();

  if (newCode.equals(confirmCode)) {
    correctPassword = newCode; 
    return true;
  } else {
    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("Code mismatch");
    lcd.setCursor(0, 1);
    lcd.print("Try again!");
    delay(2000);
    return false;
  }
}

void checkPassword() {
  if (inputPassword == correctPassword) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Correct!");
    digitalWrite(greenLED, HIGH);
    delay(2000);
    digitalWrite(greenLED, LOW);
  } else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Wrong!");
    digitalWrite(redLED, HIGH);
    delay(2000);
    digitalWrite(redLED, LOW);
  }
  
 
  inputPassword = "";
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Enter Password:");
}

Credits

Fatemeh Nabidoust
8 projects • 6 followers
•Founder & CEO : PishgamanIEA Co,LTD •(Electronic, Computer Science, Aerospace) Engineer •Senior Programmer
Contact

Comments

Please log in or sign up to comment.