# MFRC522 Status auslesen bei Verwendung von easyMFRC522

**URL:** <https://forum.arduino.cc/t/mfrc522-status-auslesen-bei-verwendung-von-easymfrc522/945608>\
**Category:** Deutsch\
**Created:** [January 10, 2022, 7:53pm UTC](https://forum.arduino.cc/t/mfrc522-status-auslesen-bei-verwendung-von-easymfrc522/945608 "2022-01-10T19:53:23Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![rusher](https://avatars.discourse-cdn.com/v4/letter/r/ac8455/32.png) [@rusher](https://forum.arduino.cc/u/rusher)\
**Post date:** [January 10, 2022, 7:53pm UTC](https://forum.arduino.cc/t/mfrc522-status-auslesen-bei-verwendung-von-easymfrc522/945608/1 "2022-01-10T19:53:23Z")

</div>

Hallo zusammen,

für ein Vereinsprojekt beschäftige ich mich gerade mit dem allseits bekannten MFRC522.  
Da ich mehrere Informationen auf dem RFID Tag speichern muss, fand ich die Bibliothek easyMFRC522 ( [GitHub - pablo-sampaio/easy\_mfrc522](https://github.com/pablo-sampaio/easy_mfrc522) ) sehr elegant, weil sie mir einiges an Arbeit abnimmt und ich neue Datenfelder einfach auf dem Tag speichern kann.

Die easyMFRC522 Library baut auf der sehr bekannten MFRC522 Library auf. Daher gibt es auch den Hinweis im easyMFRC522 Git:

> So, if you want to do other operations supported by MFRC522, you can access (the wrapped instance of) Balboa's class and use its functionality. Just call getMFRC522().

Das "just call getMFRC522()" bringt mich etwas zum zweifeln, weil ich gern den Status der Schreib-Operationen auslesen möchte um eine Rückmeldung zu haben, ob erfolgreich geschrieben wurde oder nicht.

Bei der normalen MFRC522 Library wird der Status wie folgt gelesen:

```arduino
MFRC522::StatusCode status;
status = mfrc522.MIFARE_Write(block, buffer, size);
    if (status != MFRC522::STATUS_OK) {
      // irgendetwas ist falsch gelaufen
    } else {
      // alles in Ordnung.
    }

```

Nun habe ich diverse Optionen versucht "getMFRC522()" zu Verwenden um den Status zu lesen, allerdings ohne erfolg.

Mein aktueller Code ist anbei. Und immer wenn ich rfidDict.set verwende möchte ich gern den Status der MFRC522 Schreib-Operation abgreifen.

Probiert habe ich bereits Dinge, wie hier zu sehen, allerdings ist die Funktion rfidDict.set void.

```arduino
MFRC522::StatusCode status;
status = rfidDict.set( "CARGO", String(newCargo) );

```

Könnt ihr mir hier weiterhelfen?

Vielen Dank für eure Antworten!  
rusher

```arduino
#include "RfidDictionaryView.h"

int startBlock = 10; 
RfidDictionaryView rfidDict(D4, D3, startBlock);
  MFRC522::StatusCode status;

void setup() {
  Serial.begin(9600);
  Serial.setTimeout(20000); 
  while (!Serial)
    ;
  delay(1000); 
}

void loop() {
  bool tagSelected;

  Serial.println();
  Serial.println("Warten auf NFC...");

  do {
      tagSelected = rfidDict.detectTag();
    delay(5);
  } while (!tagSelected);

  Serial.println("STEP 0: RFID Tag wird ausgelesen...");

  String key, value;
  int numKeys;
  value = rfidDict.get( "CARGO" ); 
  Serial.println("Step 1: RFID Tag hat eine Ladung von " + value + "%. Be-/Entladevorgang beginnt...");
  delay(1000);

  int initialCargo = value.toInt();
  int newCargo;

  if (initialCargo == 0) {
    Serial.println("STEP 2: RFID Tag ist leer, Ladevorgang beginnt");
    newCargo = initialCargo;
    while (newCargo < 100) {
      newCargo = newCargo + 10; //Ladung um 10% erhöhen
      rfidDict.set( "CARGO", String(newCargo) ); //Ladung auf Chip schreiben
      Serial.println("Ladevorgang: " + String(newCargo) + "%");
      delay(1000);
    }
  } else {
    Serial.println("STEP 2: RFID Tag hat Ladung, Entladevorgang beginnt");
    newCargo = initialCargo;
    while (newCargo > 0) {
      newCargo = newCargo - 10; //Ladung um 10% verringern
      rfidDict.set( "CARGO", String(newCargo) ); //Ladung auf Chip schreiben
     
      Serial.println("Entladevorgang: " + String(newCargo) + "%");
      delay(1000);
    }
  }

  Serial.println(" --------------------------------\n");
  rfidDict.disconnectTag();

  delay(3000); //
}

```

---

<div class="post-metadata">

**Author:** ![noiasca](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/noiasca/32/1126910_2.png) [@noiasca](https://forum.arduino.cc/u/noiasca)\
**Post date:** [January 10, 2022, 8:11pm UTC](https://forum.arduino.cc/t/mfrc522-status-auslesen-bei-verwendung-von-easymfrc522/945608/2 "2022-01-10T20:11:31Z")

</div>

also lt. lib:

```cpp
    inline MFRC522* getMFRC522() {
        return &this->device;
    }
```

dein Objekt heißt

```cpp
rfidDict

```

also sollte ein

```cpp
int result = rfidDict.getMFRC522();

```

eigentlich irgend ein Ergebnis bringen. Theoretisch. Nur geraten.

---

<div class="post-metadata">

**Author:** ![rusher](https://avatars.discourse-cdn.com/v4/letter/r/ac8455/32.png) [@rusher](https://forum.arduino.cc/u/rusher)\
**Post date:** [January 10, 2022, 11:25pm UTC](https://forum.arduino.cc/t/mfrc522-status-auslesen-bei-verwendung-von-easymfrc522/945608/3 "2022-01-10T23:25:56Z")

</div>

Vielen Dank für deine Antwort:  
so einfach scheint es nicht zu funktionieren. Immer wenn ich rfidDict.getMFRC522(); probiere knallt es schon beim compillieren:

> error: 'class RfidDictionaryView' has no member named 'getMFRC522'

Also kurz in die RfidDictionaryView.h geschaut und tatsächlich gibt es kein getMFRC522() in der Definition. Nach ein wenig Analyse habe ich festgestellt, dass ich aktuell die Library "RfidDictionaryView" nutze, welche die Library "EasyMFRC522" nutzt, welche wiederum die Library "MFRC522" nutzt.

In der Definition von der Library "EasyMFRC522" gibt es tatsächlich die Definition

```arduino
    inline MFRC522* getMFRC522() {
        return &this->device;
    }

```

was auf `MFRC522 device;` zurück greift.

Nun habe ich versucht, das gleiche in RfidDictionaryView.h einzubauen, da dort "device" folgendermaßen bereits definiert ist:

```arduino
    EasyMFRC522* device;

```

D.h. letztendlich nutzt meine genutzte "RfidDictionaryView" library eine Instanz der Klasse EasyMFRC522. Somit dachte ich, dass ich mit folgendem Code in der RfidDictionaryView.h auf das Device verweisen kann:

```arduino
inline EasyMFRC522** getMFRC522() {
        return &this->device;
    }

```

Allerdings gibt es dennoch Fehler beim compillieren wenn ich versuche folgenden Code zu verwenden:

` EasyMFRC522 easyMFRC= rfidDict.getMFRC522();`

> error: conversion from 'EasyMFRC522\*\*' to non-scalar type 'EasyMFRC522' requested

Ich hätte jetzt gedacht, dass ich mich so durch die Kontexte hangeln kann: vom EasyMFRC522 Device zum MFRC522 Device ... aber vermutlich liege ich damit falsch.

Für den Status habe ich mir jetzt einfach die Library ein wenig umgeschrieben und schleife den Status Code durch bis in meinen Code. Das war dann die schnellste Lösung. Allerdings bin ich immernoch an einer Lösung interessiert, um den MFRC522 Context zu bekommen, da ich gern auch andere grundlegende Features der Library nutzen möchte.

Vielen Dank für eure Hilfe!

---

<div class="post-metadata">

**Author:** ![noiasca](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/noiasca/32/1126910_2.png) [@noiasca](https://forum.arduino.cc/u/noiasca)\
**Post date:** [January 11, 2022, 4:55am UTC](https://forum.arduino.cc/t/mfrc522-status-auslesen-bei-verwendung-von-easymfrc522/945608/4 "2022-01-11T04:55:35Z")

</div>

> [@rusher](#):
>
> Allerdings bin ich immernoch an einer Lösung interessiert, um den MFRC522 Context zu bekommen, da ich gern auch andere grundlegende Features der Library nutzen möchte.

schon mal probiert das  
MFRC522 device;  
in der Klasse EasyMFRC522 von private nach public zu schieben um darauf direkten zugriff zu erhalten? Damit

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 10, 2022, 4:56am UTC](https://forum.arduino.cc/t/mfrc522-status-auslesen-bei-verwendung-von-easymfrc522/945608/5 "2022-07-10T04:56:15Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
