#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCD configuration
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variables to store the registered UID and flags
String registeredUID = "";
bool manualRegistration = false;
bool readingRFID = false;
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the LCD backlight
lcd.setCursor(0, 0);
lcd.print("Scan or Input UID");
Serial.println("Type 'R' to register manually, 'S' to start reading RFID or place your card to the reader...");
Serial.println();
}
void loop() {
// Check for manual input
if (Serial.available()) {
char command = Serial.read();
if (command == 'R' || command == 'r') {
manualRegistration = true;
Serial.println("Enter the UID manually (e.g., 12345678):");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enter UID:");
} else if (command == 'S' || command == 's') {
readingRFID = true;
Serial.println("Reading RFID UID...");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Reading RFID...");
}
}
// Manual Registration
if (manualRegistration && Serial.available()) {
registeredUID = Serial.readStringUntil('\n');
registeredUID.trim(); // Remove any leading/trailing whitespace
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Registered UID:");
lcd.setCursor(0, 1);
lcd.print(registeredUID);
Serial.println("UID registered manually.");
manualRegistration = false;
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Scan or Input UID");
}
// Simulated RFID Reading
if (readingRFID && Serial.available()) {
String content = Serial.readStringUntil('\n');
content.trim();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("UID Read:");
lcd.setCursor(0, 1);
lcd.print(content);
Serial.print("UID Read: ");
Serial.println(content);
if (registeredUID == "") {
registeredUID = content;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Registered UID:");
lcd.setCursor(0, 1);
lcd.print(content);
Serial.println("UID registered.");
} else if (content == registeredUID) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("UID Matched!");
lcd.setCursor(0, 1);
lcd.print(content);
Serial.println("Authorized access.");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Access denied!");
lcd.setCursor(0, 1);
lcd.print(content);
Serial.println("Access denied.");
}
delay(3000); // Delay for display
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Scan or Input UID");
readingRFID = false;
}
}