SERIAL.BEGIN(9600); stops the overall arduino when typing the password in keypad

// Include required libraries
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
#include <SPI.h>

// Create instances
LiquidCrystal_I2C lcd(0x27, 16, 2);
MFRC522 mfrc522(10, 9); // MFRC522 mfrc522(SS_PIN, RST_PIN)
Servo sg90;

// Initialize Pins for led's, servo and buzzer
// Blue LED is connected to 5V
constexpr uint8_t greenLed = 7;
constexpr uint8_t redLed = 6;
constexpr uint8_t servoPin = 8;
constexpr uint8_t buzzerPin = 5;

char initial_password[4] = {'1', '2', '3', '4'}; // Variable to store initial password
String tagUID = "C0 C4 07 21";
int readsuccess;
byte readcard[4];
char str[32] = "";
String StrUID;

char password[4]; // Variable to store users password
boolean RFIDMode = true; // boolean to change modes
char key_pressed = 0; // Variable to store incoming keys
uint8_t i = 0; // Variable used for counter

// defining how many rows and columns our keypad have
const byte rows = 4;
const byte columns = 4;

// Keypad pin map
char hexaKeys[rows][columns] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};

// Initializing pins for keypad
byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {2, 1, 0};

// Create instance for keypad
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);

void setup() {

Serial.begin(9600);

Serial.println("Scan PICC to see UID...");
Serial.println("");
// Arduino Pin configuration
pinMode(buzzerPin, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);

sg90.attach(servoPin); //Declare pin 8 for servo
sg90.write(0); // Set initial position at 90 degrees

lcd.begin(); // LCD screen
lcd.backlight();
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522

lcd.clear(); // Clear LCD screen
}

void loop() {
// System will first look for mode
if (RFIDMode == true) {
lcd.setCursor(0, 0);
lcd.print(" Door Lock");
lcd.setCursor(0, 1);
lcd.print(" Scan Your Tag ");

// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
  return;
}

// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
  return;
}

//Reading from the card
String tag = "";
for (byte j = 0; j < mfrc522.uid.size; j++)
{
  tag.concat(String(mfrc522.uid.uidByte[j] < 0x10 ? " 0" : " "));
  tag.concat(String(mfrc522.uid.uidByte[j], HEX));
}
tag.toUpperCase();

//Checking the card
if (tag.substring(1) == "C0 C4 07 21")
{
  // If UID of tag is matched.
  
  lcd.clear();
  lcd.print("Tag Matched");
  digitalWrite(buzzerPin, HIGH);
  digitalWrite(greenLed, HIGH);
  delay(500);
  digitalWrite(buzzerPin, LOW);
  digitalWrite(greenLed, LOW);
   lcd.clear();
  lcd.print("EMPLOYEE 1");
  digitalWrite(greenLed, HIGH);
  delay(2000);
  digitalWrite(greenLed, LOW);

  lcd.clear();
  lcd.print("Enter Password:");
  lcd.setCursor(0, 1);
  RFIDMode = false; // Make RFID mode false
  
  Serial.println( (String) "DATA,DATE,TIME," + StrUID );
}

else if (tag.substring(1) == "A3 51 9A 08")
{
  // If UID of tag is matched.
  Serial.println( (String) "DATA,DATE,TIME," + StrUID );
  lcd.clear();
  lcd.print("Tag Matched");
  digitalWrite(buzzerPin, HIGH);
  digitalWrite(greenLed, HIGH);
  delay(500);
  digitalWrite(buzzerPin, LOW);
  digitalWrite(greenLed, LOW);
   lcd.clear();
  lcd.print("EMPLOYEE 2");
  digitalWrite(greenLed, HIGH);
  delay(2000);
  digitalWrite(greenLed, LOW);

  lcd.clear();
  lcd.print("Enter Password:");
  lcd.setCursor(0, 1);
  RFIDMode = false; // Make RFID mode false
}

else
{
  // If UID of tag is not matched.
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Wrong Tag Shown");
  lcd.setCursor(0, 1);
  lcd.print("Access Denied");
  digitalWrite(buzzerPin, HIGH);
  digitalWrite(redLed, HIGH);
  delay(3000);
  digitalWrite(buzzerPin, LOW);
  digitalWrite(redLed, LOW);
  lcd.clear();
}

}

// If RFID mode is false, it will look for keys from keypad
if (RFIDMode == false) {
key_pressed = keypad_key.getKey(); // Storing keys
if (key_pressed)
{
password[i++] = key_pressed; // Storing in password variable
lcd.print("*");
}
if (i == 4) // If 4 keys are completed
{
delay(200);
if (!(strncmp(password, initial_password, 4))) // If password is matched
{
lcd.clear();
lcd.print("Pass Accepted");
sg90.write(90); // Door Opened
digitalWrite(greenLed, HIGH);
delay(3000);
digitalWrite(greenLed, LOW);
sg90.write(0); // Door Closed
lcd.clear();
i = 0;
RFIDMode = true; // Make RFID mode true
}
else // If password is not matched
{
lcd.clear();
lcd.print("Wrong Password");
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLed, HIGH);
delay(3000);
digitalWrite(buzzerPin, LOW);
digitalWrite(redLed, LOW);
lcd.clear();
i = 0;
RFIDMode = true; // Make RFID mode true
}
}
}
}

Welcome to the forum

Please follow the advice given in the link below when posting code, in particular the section entitled 'Posting code and common code problems'

Use code tags (the </> icon above the compose window) to make it easier to read and copy for examination

byte column_pins[columns] = {2, 1, 0};

The problem is right there if you are using an AVR based board such as a Uno or Nano because pins 0 and 1 are used for the Serial interface to the PC

1 Like

so i can't use serial monitor in arduino uno if i use keypad?

Of course you can if you don't use pins 0 and 1 for the keypad (or anything else)

1 Like

i move them to 3 and 4 so the code is byte column_pins[columns] = {2, 4, 3};

Does it work now ?

Please edit your first post and add the code tags

1 Like

It works! thankyou very much

Good luck with your project going forward and keep away from pins 0 and 1

1 Like

can you please clean up your first post and add code tags to maintain the forum's clean state... don't leave trash behind please..

This is OP's final sketch (probably) with code tags and replacing DPins-1, 0 by DPins-4,3..

#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
#include <SPI.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
MFRC522 mfrc522(10, 9); // MFRC522 mfrc522(SS_PIN, RST_PIN)
Servo sg90;

constexpr uint8_t greenLed = 7;
constexpr uint8_t redLed = 6;
constexpr uint8_t servoPin = 8;
constexpr uint8_t buzzerPin = 5;

char initial_password[4] = {'1', '2', '3', '4'}; // Variable to store initial password
String tagUID = "C0 C4 07 21";
int readsuccess;
byte readcard[4];
char str[32] = "";
String StrUID;

char password[4]; // Variable to store users password
boolean RFIDMode = true; // boolean to change modes
char key_pressed = 0; // Variable to store incoming keys
uint8_t i = 0; // Variable used for counter

const byte rows = 4;
const byte columns = 4;

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

byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {2, 4, 3); //1, 0};

Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);

void setup()
{
  Serial.begin(9600);
  Serial.println("Scan PICC to see UID...");
  Serial.println("");
  pinMode(buzzerPin, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);

  sg90.attach(servoPin); //Declare pin 8 for servo
  sg90.write(0); // Set initial position at 90 degrees

  lcd.begin(); // LCD screen
  lcd.backlight();
  SPI.begin(); // Init SPI bus
  mfrc522.PCD_Init(); // Init MFRC522

  lcd.clear(); // Clear LCD screen
}

void loop()
{
  if (RFIDMode == true)
  {
    lcd.setCursor(0, 0);
    lcd.print(" Door Lock");
    lcd.setCursor(0, 1);
    lcd.print(" Scan Your Tag ");
    // Look for new cards
    if ( ! mfrc522.PICC_IsNewCardPresent())
    {
      return;
    }
    // Select one of the cards
    if ( ! mfrc522.PICC_ReadCardSerial())
    {
      return;
    }

    //Reading from the card
    String tag = "";
    for (byte j = 0; j < mfrc522.uid.size; j++)
    {
      tag.concat(String(mfrc522.uid.uidByte[j] < 0x10 ? " 0" : " "));
      tag.concat(String(mfrc522.uid.uidByte[j], HEX));
    }
    tag.toUpperCase();

    //Checking the card
    if (tag.substring(1) == "C0 C4 07 21")
    {
      // If UID of tag is matched.

      lcd.clear();
      lcd.print("Tag Matched");
      digitalWrite(buzzerPin, HIGH);
      digitalWrite(greenLed, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      digitalWrite(greenLed, LOW);
      lcd.clear();
      lcd.print("EMPLOYEE 1");
      digitalWrite(greenLed, HIGH);
      delay(2000);
      digitalWrite(greenLed, LOW);

      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
      RFIDMode = false; // Make RFID mode false

      Serial.println( (String) "DATA,DATE,TIME," + StrUID );
    }

    else if (tag.substring(1) == "A3 51 9A 08")
    {
      // If UID of tag is matched.
      Serial.println( (String) "DATA,DATE,TIME," + StrUID );
      lcd.clear();
      lcd.print("Tag Matched");
      digitalWrite(buzzerPin, HIGH);
      digitalWrite(greenLed, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      digitalWrite(greenLed, LOW);
      lcd.clear();
      lcd.print("EMPLOYEE 2");
      digitalWrite(greenLed, HIGH);
      delay(2000);
      digitalWrite(greenLed, LOW);

      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
      RFIDMode = false; // Make RFID mode false
    }

    else
    {
      // If UID of tag is not matched.
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Wrong Tag Shown");
      lcd.setCursor(0, 1);
      lcd.print("Access Denied");
      digitalWrite(buzzerPin, HIGH);
      digitalWrite(redLed, HIGH);
      delay(3000);
      digitalWrite(buzzerPin, LOW);
      digitalWrite(redLed, LOW);
      lcd.clear();
    }
  }

  // If RFID mode is false, it will look for keys from keypad
  if (RFIDMode == false)
  {
    key_pressed = keypad_key.getKey(); // Storing keys
    if (key_pressed)
    {
      password[i++] = key_pressed; // Storing in password variable
      lcd.print("*");
    }
    if (i == 4) // If 4 keys are completed
    {
      delay(200);
      if (!(strncmp(password, initial_password, 4))) // If password is matched
      {
        lcd.clear();
        lcd.print("Pass Accepted");
        sg90.write(90); // Door Opened
        digitalWrite(greenLed, HIGH);
        delay(3000);
        digitalWrite(greenLed, LOW);
        sg90.write(0); // Door Closed
        lcd.clear();
        i = 0;
        RFIDMode = true; // Make RFID mode true
      }
      else // If password is not matched
      {
        lcd.clear();
        lcd.print("Wrong Password");
        digitalWrite(buzzerPin, HIGH);
        digitalWrite(redLed, HIGH);
        delay(3000);
        digitalWrite(buzzerPin, LOW);
        digitalWrite(redLed, LOW);
        lcd.clear();
        i = 0;
        RFIDMode = true; // Make RFID mode true
      }
    }
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.