Access System

 avatar
unknown
plain_text
a month ago
3.3 kB
1
Indexable
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>

// RFID Pins
#define RST_PIN 9
#define SS_PIN  10

// LEDs and Buzzer Pins
#define BlueLED  2
#define GreenLED 3
#define RedLED   4
#define Buzzer   5

// RFID and LCD objects
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x3F, 16, 2);

// Master Tag UID (replace with your MasterTag from the first code)
String MasterTag = "D7 F5 79 C9"; // Replace this
String UIDCard = "";

// Function declarations
boolean getUID();

void setup() {
  // Initialize serial monitor
  Serial.begin(9600);

  // Initialize RFID reader
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("RFID Reader Initialized!");

  // Initialize LCD
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.print(" Scan Your Card");
  lcd.setCursor(0, 1);
  lcd.print("    On Reader");

  // Initialize LEDs and Buzzer
  pinMode(BlueLED, OUTPUT);
  pinMode(GreenLED, OUTPUT);
  pinMode(RedLED, OUTPUT);
  pinMode(Buzzer, OUTPUT);

  // Default state
  digitalWrite(BlueLED, HIGH); // Blue LED ON to indicate waiting for scan
  digitalWrite(GreenLED, LOW);
  digitalWrite(RedLED, LOW);
  noTone(Buzzer);

  Serial.println("System Ready. Waiting for card scan...");
}

void loop() {
  // Default waiting state
  digitalWrite(BlueLED, HIGH); // Blue LED ON when idle
  digitalWrite(GreenLED, LOW);
  digitalWrite(RedLED, LOW);

  // Check for RFID card
  if (getUID()) {
    Serial.print("Card Scanned! UID: ");
    Serial.println(UIDCard);

    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print(" Permission");
    lcd.setCursor(0, 1);

    if (UIDCard == MasterTag) {
      // Access Granted
      Serial.println("Access Granted");
      lcd.print(" Access Granted");

      digitalWrite(BlueLED, LOW);  // Blue LED OFF
      digitalWrite(GreenLED, HIGH); // Green LED ON
      digitalWrite(RedLED, LOW);  // Red LED OFF

      tone(Buzzer, 2000, 500); // Beep
      delay(3000); // Wait for 3 seconds
    } else {
      // Access Denied
      Serial.println("Access Denied!");
      lcd.print(" Access Denied!");

      digitalWrite(BlueLED, LOW);  // Blue LED OFF
      digitalWrite(GreenLED, LOW); // Green LED OFF

      // Blink Red LED
      for (int i = 0; i < 5; i++) {
        digitalWrite(RedLED, HIGH);
        tone(Buzzer, 2000, 250); // Beep
        delay(250);
        digitalWrite(RedLED, LOW);
        delay(250);
      }
    }

    // Reset to default state
    lcd.clear();
    lcd.print("     Please");
    lcd.setCursor(0, 1);
    lcd.print(" Scan Your Card");

    digitalWrite(BlueLED, HIGH);  // Blue LED back ON
    digitalWrite(GreenLED, LOW);  // Green LED OFF
    digitalWrite(RedLED, LOW);    // Red LED OFF

    Serial.println("System reset. Waiting for next card...");
  }
}

// Function to get UID of scanned card
boolean getUID() {
  if (!mfrc522.PICC_IsNewCardPresent()) {
    return false; // No card detected
  }

  if (!mfrc522.PICC_ReadCardSerial()) {
    return false; // Unable to read card
  }

  // Get UID
  UIDCard = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    UIDCard.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    UIDCard.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  UIDCard.toUpperCase();
  UIDCard = UIDCard.substring(1);

  mfrc522.PICC_HaltA(); // Halt communication
  return true;
}
Leave a Comment