[SOLVED] Read the RFID Tag a second time

How can I read the RFID Tag a second time? I want to read the Tag first time and Display on the LCD Display “Logged In” and on the second time if it’s the same Tag “Logged Out”.

Here is the code:

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#define SS_PIN 10
#define RST_PIN 9
boolean loggedIn = false;
long code2 = 0;
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(8, 6, 5, 4, 3, 2); //LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
lcd.begin(16, 2);
}

void loop()
{
  
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}

if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0; // Als neue Variable fügen wir „code“ hinzu, unter welcher später die UID als zusammenhängende Zahl ausgegeben wird. Statt int benutzen wir jetzt den Zahlenbereich „long“, weil sich dann eine größere Zahl speichern lässt.

if(code == 0){
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
  code=((code+mfrc522.uid.uidByte[i])*10); // Nun werden wie auch vorher die vier Blöcke ausgelesen und in jedem Durchlauf wird der Code mit dem Faktor 10 „gestreckt“. (Eigentlich müsste man hier den Wert 1000 verwenden, jedoch würde die Zahl dann zu groß werden.
  }
}

Serial.print("Die Kartennummer lautet:"); // Zum Schluss wird der Zahlencode (Man kann ihn nicht mehr als UID bezeichnen) ausgegeben.
Serial.println(code);

if(loggedIn == false) {
  switch(code){
    case 2528600:
      loggedIn = true;
      break;
    case 238618920:
      loggedIn = true;
      break;
    case 328780:
      loggedIn = true;
      break;
    default:
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Karte nicht");
      lcd.setCursor(2, 1);
      lcd.print("registriert!");
      break;
  }
} else {
    lcd.clear();
    lcd.setCursor(5, 0);
    lcd.print("Logged In");
    lcd.setCursor(2, 1);
    lcd.print(code);
    if(code2 != code) {
      code = 0;
      loggedIn = false;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Logged Out");
      delay(2000);
      lcd.clear();
    } else {
      getCode();
    }
}

}

long getCode() {
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
  code2=((code2+mfrc522.uid.uidByte[i])*10); // Nun werden wie auch vorher die vier Blöcke ausgelesen und in jedem Durchlauf wird der Code mit dem Faktor 10 „gestreckt“. (Eigentlich müsste man hier den Wert 1000 verwenden, jedoch würde die Zahl dann zu groß werden.
  }
  Serial.print("Code:");
  Serial.println(code2);
}

You have only one variable named 'loggedIn'. Does that mean that the logged-in person must log out before a new person can log in?

Maybe you could add a global "long loggedInCode;" and set that to 'code' when you set the loggedIn flag.

  // Filter out unregistered cards
  switch (code) {
    case 2528600:
    case 238618920:
    case 328780:
      break;

    default:
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Karte nicht");
      lcd.setCursor(2, 1);
      lcd.print("registriert!");
      return;
  }

  if (loggedIn) {  // Someone is logged in
    if (code == loggedInCode) {
      // 'code' is logging out.
      loggedIn = false;
    } else {  // code doesn't match loggedInCode!
      // ERROR!  'code' is trying to log in while 'loggedInCode' is still logged in.
      loggedInCode = code;
    }
  } else { // Nobody is logged in
    // Log in this code
    loggedInCode = code;
    loggedIn = true;
  }

johnwasser:
You have only one variable named 'loggedIn'. Does that mean that the logged-in person must log out before a new person can log in?

Maybe you could add a global "long loggedInCode;" and set that to 'code' when you set the loggedIn flag.

Thanks, it is like the Apache example site: It works! :'D