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 ) 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:
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.
MFRC522::StatusCode status;
status = rfidDict.set( "CARGO", String(newCargo) );
Könnt ihr mir hier weiterhelfen?
Vielen Dank für eure Antworten!
rusher
#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); //
}