#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Agar display na chale to 0x3F try karein
#include <MFRC522.h>
#include <SPI.h>
#include <SD.h>
#include <RTClib.h>
#define CS_RFID 10
#define RST_RFID 9
#define CS_SD 4
File myFile;
MFRC522 rfid(CS_RFID, RST_RFID);
RTC_DS1307 rtc;
String uidString;
const int checkInHour = 9;
const int checkInMinute = 5;
int userCheckInHour;
int userCheckInMinute;
const int redLED = 6;
const int greenLED = 7;
const int buzzer = 5;
void setup() {
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
SPI.begin();
rfid.PCD_Init();
lcd.print("Initializing SD");
delay(2000);
lcd.clear();
if(!SD.begin(CS_SD)) {
lcd.print("SD Failed!");
return;
}
lcd.print("SD Done");
delay(2000);
lcd.clear();
if(!rtc.begin()) {
lcd.print("RTC Error!");
while(1);
}
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
if(rfid.PICC_IsNewCardPresent()) {
readRFID();
logCard();
verifyCheckIn();
}
}
void readRFID() {
if(!rfid.PICC_ReadCardSerial()) return;
lcd.clear();
lcd.print("Tag UID:");
uidString = "";
for (byte i = 0; i < rfid.uid.size; i++) {
uidString += String(rfid.uid.uidByte[i], HEX);
}
lcd.setCursor(0,1);
lcd.print(uidString);
tone(buzzer, 2000);
delay(200);
noTone(buzzer);
delay(2000);
}
void logCard() {
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
DateTime now = rtc.now();
myFile.print(uidString);
myFile.print(", ");
myFile.print(now.year());
myFile.print('/');
myFile.print(now.month());
myFile.print('/');
myFile.print(now.day());
myFile.print(' ');
myFile.print(now.hour());
myFile.print(':');
myFile.println(now.minute());
myFile.close();
userCheckInHour = now.hour();
userCheckInMinute = now.minute();
lcd.clear();
lcd.print("Written to SD");
delay(2000);
}
else {
lcd.print("SD Write Error");
delay(2000);
}
}
void verifyCheckIn(){
lcd.clear();
if((userCheckInHour < checkInHour) ||
(userCheckInHour == checkInHour && userCheckInMinute <= checkInMinute)) {
digitalWrite(greenLED, HIGH);
lcd.print("You're Welcome");
delay(2000);
digitalWrite(greenLED, LOW);
}
else {
digitalWrite(redLED, HIGH);
lcd.print("You are Late");
delay(2000);
digitalWrite(redLED, LOW);
}
lcd.clear();
lcd.print("Scan RFID...");
}