No title

 #include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <SPI.h>

#include <MFRC522.h>

#include <SD.h>

#include <RTClib.h>


// LCD

LiquidCrystal_I2C lcd(0x27, 16, 2);


// RFID

#define SS_PIN 10

#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);


// SD

#define SD_CS 4

File myFile;


// RTC

RTC_DS1307 rtc;


// Single LED & Buzzer

#define ledPin 6

#define buzzer 5


// Mapping UID to Names

struct Card {

  String uid;

  String name;

};


// Add your cards here

Card cards[] = {

  {"2041E959", "UMAIR"},

  {"1080FB59", "ALI"},

  {"20007D14", "SARAH"},

  {"23A1291A", "Jack"}

};


const int numCards = sizeof(cards)/sizeof(cards[0]);


void setup() {

  pinMode(ledPin, OUTPUT);

  pinMode(buzzer, OUTPUT);


  Serial.begin(9600);

  SPI.begin();


  lcd.init();

  lcd.backlight();


  // Welcome Screen

  lcd.setCursor(0,0);

  lcd.print("RFID Attendance");

  lcd.setCursor(0,1);

  lcd.print("System Starting");

  delay(2000);

  lcd.clear();


  // Initialize RFID

  mfrc522.PCD_Init();

  delay(1000);

  Serial.println("RFID Initialized");


  // Initialize SD

  lcd.print("Checking SD...");

  if (!SD.begin(SD_CS)) {

    lcd.clear();

    lcd.print("SD Failed!");

    Serial.println("SD Initialization Failed!");

    while(1);

  }

  lcd.clear();

  lcd.print("SD Ready");

  Serial.println("SD Ready");

  delay(1500);

  lcd.clear();


  // Initialize RTC

  lcd.print("Checking RTC...");

  if (!rtc.begin()) {

    lcd.clear();

    lcd.print("RTC Error!");

    Serial.println("RTC Initialization Failed!");

    while(1);

  }

  lcd.clear();

  lcd.print("RTC Ready");

  Serial.println("RTC Ready");

  delay(1500);

  lcd.clear();

}


void loop() {

  showDateTime();


  if (mfrc522.PICC_IsNewCardPresent()) {

    Serial.println("Card detected!");

    if (mfrc522.PICC_ReadCardSerial()) {

      Serial.println("Card serial read!");

      handleCard();

    } else {

      Serial.println("Failed to read card serial");

    }

  }

}


void showDateTime() {

  DateTime now = rtc.now();

  lcd.setCursor(0,0);

  lcd.print("Time: ");

  lcd.print(now.hour());

  lcd.print(":");

  if(now.minute()<10) lcd.print("0");

  lcd.print(now.minute());

  lcd.setCursor(0,1);

  lcd.print("Scan RFID Card ");

  delay(1000);

}


void handleCard() {

  // Read UID

  String uid = "";

  for (byte i = 0; i < mfrc522.uid.size; i++) {

    if(mfrc522.uid.uidByte[i] < 0x10) uid += "0"; // leading zero

    uid += String(mfrc522.uid.uidByte[i], HEX);

  }

  uid.toUpperCase();

  Serial.print("Card UID: "); Serial.println(uid);


  // Find name

  String cardName = "Unknown";

  for (int i=0; i<numCards; i++) {

    if (uid == cards[i].uid) {

      cardName = cards[i].name;

      break;

    }

  }


  // LED + Buzzer feedback

  for(int i=0; i<3; i++) {

    digitalWrite(ledPin,HIGH);

    tone(buzzer, 2000);

    delay(200);

    digitalWrite(ledPin,LOW);

    noTone(buzzer);

    delay(100);

  }


  // LCD Display

  lcd.clear();

  lcd.setCursor(0,0);

  lcd.print("WELCOME");

  lcd.setCursor(0,1);

  lcd.print(cardName);


  // Serial Monitor

  Serial.print("Welcome "); Serial.println(cardName);


  // Save to SD

  DateTime now = rtc.now();

  myFile = SD.open("DATA.txt", FILE_WRITE);

  if (myFile) {

    myFile.print(cardName); myFile.print(" ");

    if(now.hour()<10) myFile.print("0");

    myFile.print(now.hour()); myFile.print(":");

    if(now.minute()<10) myFile.print("0");

    myFile.print(now.minute()); myFile.print(" ");

    if(now.day()<10) myFile.print("0");

    myFile.print(now.day()); myFile.print("/");

    if(now.month()<10) myFile.print("0");

    myFile.print(now.month()); myFile.print("/");

    myFile.print(now.year());

    myFile.println();

    myFile.close();

    Serial.println("Data saved to SD");

  } else {

    Serial.println("Failed to open DATA.txt");

  }


  delay(3000); // show message

  lcd.clear();


  // Reset RFID

  mfrc522.PICC_HaltA();

  mfrc522.PCD_StopCrypto1();

}


Post a Comment

Previous Post Next Post

Contact Form