#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// RFID
#define SS_PIN 21
#define RST_PIN 22
MFRC522 mfrc522(SS_PIN, RST_PIN);
// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// LED
#define LED_PIN 5
// مصفوفة UID → اسم الطالب
struct Student {
String uid;
String name;
};
Student students[] = {
{"A1B2C3D4", "Ali"},
{"55667788", "Sara"},
{"DEADBEEF", "Mohammed"}
};
void setup() {
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
Wire.begin(16,17); // SDA=16, SCL=17
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Scan your card...");
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.println("Ready to read RFID cards...");
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
// قراءة UID
String uidStr = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
if (mfrc522.uid.uidByte[i] < 0x10) uidStr += "0";
uidStr += String(mfrc522.uid.uidByte[i], HEX);
}
uidStr.toUpperCase(); // لتوحيد التنسيق
Serial.print("Card UID: "); Serial.println(uidStr);
// البحث عن الاسم
String studentName = "Unknown";
for (int i = 0; i < sizeof(students)/sizeof(students[0]); i++) {
if (uidStr == students[i].uid) {
studentName = students[i].name;
break;
}
}
// عرض الاسم على LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Student:");
lcd.setCursor(0,1);
lcd.print(studentName);
// تشغيل LED إذا تعرف على الطالب
if (studentName != "Unknown") {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
delay(3000); // تأخير لعرض الاسم
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Scan your card...");
digitalWrite(LED_PIN, LOW);
mfrc522.PICC_HaltA();
}Loading
mfrc522
mfrc522