Tommy56: @TO: Du musst erst mal raus bekommen (erstes HEX-Einlesen nach Neustart), ob das 0-Byte ein Rest oder ein Inhalt ist. Danach kann man weiter sehen.
Aus den o.g. Quellen habe ich auch schon Example #5: Format a Tag as NDEF
verwendet. Daher dachte ich, dass da kein Rest mehr drauf sein konnte???
Meine Reihenfolge war: Format, Write, Read ... relativ naheliegend, fand ich!?
Neustart hat nichts gebracht -- gleicher Payload (HEX)!
Ok, jetzt verstehe ich ... habe gerade nochmal ein ganz neues NFC-TAG (NFC – BLOCKARD.COM) aus der Packung genommen und wollte es formatieren ... bei den Aufklebern erschien jetzt seltsamerweise "Format failed." Das Schreiben funktionierte mit der Vorlage aber -- daher dachte ich bisher, dass die Dinger dann auf jeden Fall leer sein müssen. Wenn ihr meint, dass da auf diese Weise ein Rest oder irgendein Steuerzeichen drauf sein kann, muss das vorher offenbar runter.
Meine anderen Tags (keine Aufkleber, Scheckkartenformat, Mifare) konnte ich mit dem Sketchfile übrigens problemlos formatieren.
whiterabbit07:
Neustart hat nichts gebracht -- gleicher Payload (HEX)!
Na was ich für ein Glückkkkkk habe. Ich hab gedacht ich bin da ganz schnell raus ...
Ok, jetzt verstehe ich ... habe gerade nochmal ein ganz neues NFC-TAG (NFC – BLOCKARD.COM) aus der Packung genommen und wollte es formatieren ... bei den Aufklebern erschien jetzt seltsamerweise "Format failed."
Naja, die Meldung kommt von hier:
bool success = nfc.format();
if (success) {
Serial.println("Success, tag formatted as NDEF.");
} else {
Serial.println("Format failed.");
}
Letztendlich gibt nfc.format einen Wert zurück.
Der kommt aus der eingebundenen lib.
Eingebunden ist nfcAdapter.h.
Hm -- wir kommen der Sache scheinbar näher -- aber vergiss nicht, dass ich immernoch ~newbie bin ;D
Also wenn ich das richtig sehe, muss aus #ifdef ein #define gemacht werden oder wie muss ich das "nur noch einschalten" verstehen?
Also ich hätte nicht gedacht, dass dieses kleine Problem so kompliziert ist.
Ich habe es auch schon anders versucht -- stoße aber immer wieder an meine seher beschränkten Programmierkenntnisse:
if (payload == 0x0048616D6D6572)
liefert mir z.B.
warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]
Das ist mir auch nicht klar, da ich dachte, dass nun beides als "byte" definiert ist ... unter'm Strich: Geht es nicht irgendwie einfacher? Zwei Strings miteinander zu vergleichen fände ich einleuchtend -- wird aber nicht empfohlen.
whiterabbit07:
unter'm Strich: Geht es nicht irgendwie einfacher?
Ja. Das Problem beheben.
Hinweis: Du kannst auch ganz auf das #if def verzichten - einfach an der Stelle auskommentieren - dann bekommst die Ausgabe, wen es passt. Aber die Ausgaben werden auch an anderen Stellen verwendet. Wenn also gesetzt dann bekommst Du alles zu sehen, wo sich der Ersteller der Lib Gedanken gemacht hat.
Ich wollte hier jetzt keine Grundsatzdiskussion anstoßen --- mir ist klar, dass ich kein Profi-Pogrammierer bin, der den Code gänzlich versteht. Ich kratze sehr an der Oberfläche und bin schon froh, dass die Basics funktionierten.
Die Lösung kam aus dem englischen Teil des Forums:
for (int c = 1; c < payloadLength; c++) {
payloadAsString += (char)payload[c];
}
Das lässt das Steuerzeichen am Anfang weg -- und dann funktioniert auch der Vergleich