Professional Documents
Culture Documents
Rfid Card
Rfid Card
h>
#include <MFRC522.h>
#include <EEPROM.h>
struct StoredCard {
uint32_t cardNumber;
bool timerRunning;
unsigned long startTime;
};
StoredCard storedCards[maxStoredCards];
uint32_t lastDetectedCardNumber = 0; // Store the last detected card number
void setup() {
Serial.begin(9600); // Initialize serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate the RFID module
void loop() {
if (mfrc522.PICC_IsNewCardPresent()) {
if (mfrc522.PICC_ReadCardSerial()) {
uint32_t currentCardNumber = 0;
for (byte i = 0; i < mfrc522.uid.size; i++) {
currentCardNumber = (currentCardNumber << 8) | mfrc522.uid.uidByte[i];
}
if (storedCardIndex != -1) {
// Same card detected again, stop the timer and remove the card data
unsigned long elapsedTime = stopTimer(storedCardIndex);
removeStoredCard(storedCardIndex);
Serial.print("Card removed. Timer stopped. Card Number: ");
Serial.println(currentCardNumber);
Serial.print("Elapsed Time (s): ");
Serial.println(elapsedTime / 1000);
displayPayment(elapsedTime);
} else {
// New card detected, start the timer and store the card data
int emptySlot = findEmptySlot();
if (emptySlot != -1) {
startTimer(emptySlot, currentCardNumber);
storeCardData(emptySlot, currentCardNumber);
lastDetectedCardNumber = currentCardNumber; // Store the last detected
card number
Serial.print("Card detected. Timer started. Card Number: ");
Serial.println(currentCardNumber);
} else {
Serial.println("Storage is full. Can't store more cards.");
}
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
}
// If you want to stop the timer after a certain period, you can add a
condition here
// For example, if (elapsedTime >= someThreshold) stopTimer(i);
}
}
}
int findEmptySlot() {
for (int i = 0; i < maxStoredCards; i++) {
if (storedCards[i].cardNumber == 0) {
return i;
}
}
return -1; // No empty slot found
}