#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <MFRC522.h>
// Pin tanimlari / Pin definitions
const int RST_PIN = 27;
const int SS_PIN = 5;
MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long lastScan = 0;
const unsigned long DISPLAY_HOLD = 3000;
bool showingCard = false;
void showWaitMessage() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kart okutun");
lcd.setCursor(0, 1);
lcd.print("Scan a card");
}
void setup() {
// V1 default I2C: SDA=21 SCL=22
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
// Splash 3sn
lcd.setCursor(3, 0);
lcd.print("BlueGrays");
lcd.setCursor(2, 1);
lcd.print("RFID v1.0");
delay(3000);
SPI.begin();
rfid.PCD_Init();
delay(50);
showWaitMessage();
}
void loop() {
// Hold gosterimi suresi doldu / Display hold expired
if (showingCard && millis() - lastScan > DISPLAY_HOLD) {
showWaitMessage();
showingCard = false;
}
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
delay(50);
return;
}
// Kart bulundu / Card found
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kart UID:");
lcd.setCursor(0, 1);
for (byte i = 0; i < rfid.uid.size; i++) {
if (rfid.uid.uidByte[i] < 0x10) lcd.print("0");
lcd.print(rfid.uid.uidByte[i], HEX);
if (i < rfid.uid.size - 1) lcd.print(":");
}
lastScan = millis();
showingCard = true;
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}