#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#define SS_PIN 10
#define RST_PIN 9
#define BUZZER 8
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
String validUID = "AA BB CC DD";
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
Wire.begin();
lcd.init();
lcd.backlight();
pinMode(BUZZER, OUTPUT);
rtc.begin();
lcd.print("Scan Your Card");
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
String readUID = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
if (mfrc522.uid.uidByte[i] < 0x10) readUID += "0";
readUID += String(mfrc522.uid.uidByte[i], HEX);
if (i != mfrc522.uid.size - 1) readUID += " ";
}
readUID.toUpperCase();
lcd.clear();
if (readUID == validUID) {
// ✅ SUCCESS
lcd.print("Attendance OK");
DateTime now = rtc.now();
lcd.setCursor(0,1);
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
// 🔊 ONE LONG BEEP
tone(BUZZER, 1000);
delay(800);
noTone(BUZZER);
} else {
// ❌ FAILED
lcd.print("Access Denied");
// 🔊 TWO LONG BEEPS
for(int i=0; i<2; i++){
tone(BUZZER, 800);
delay(500);
noTone(BUZZER);
delay(300);
}
}
delay(2000);
lcd.clear();
lcd.print("Scan Your Card");
}