Der Wert, den Sie derzeit erhalten, ist die Seriennummer, die als US-ASCII-Zeichenfolge codiert ist. Der Wert in dezimal (wie Sie drucken es derzeit) ist
2 48 57 48 48 50 69 52 69 65 50 67 66 3
diese Bytes in hexadezimaler Form umwandeln (zur besseren Lesbarkeit) führt zu:
02 30 39 30 30 32 45 34 45 41 32 43 42 03
dieses Bytes Encoding in US-ASCII führt zu dieser Zeichenfolge:
<STX>09002E4EA2CB<ETX>
Beachten Sie, dass Sie dieses Formular auch direkt über
0 auf der Konsole erhalten könnte
Serial.write(i);
anstelle von Serial.print(i, DEC);
Somit beginnt Ihre Leser die Seriennummer ausgibt, indem ein Start-of-Transmission (STX) Zeichen Senden (0x02) und endet mit einem Ende-der-Übertragung der Seriennummer zu senden (ETX) Zeichen. Alles dazwischen ist die Seriennummer (dargestellt als hexadezimale Zeichen):
09002E4EA2CB
Die Seriennummer gedruckt auf Ihrem Schlüssel (0003034786) ist nur ein Bruchteil der kompletten Seriennummer. Dieser Wert ist die dezimale Darstellung.Wenn Sie
0003034786
in seine hexadezimale Darstellung umwandeln, erhalten Sie
002E4EA2
Dieser Wert wird in der Seriennummer enthalten ist, die Sie von dem Leser empfangen:
09002E4EA2CB
Daher könnten Sie Führen Sie so etwas aus, um den Wert zu drucken (verwenden Sie sprintf()
, wenn Sie die führenden Nullen benötigen):
void loop() {
int serialNumber = 0;
int charIndex = 0;
int currentChar;
if (RFID.available() > 0) {
currentChar = RFID.read();
++charIndex;
if (currentChar == 0x002) {
charIndex = 0;
serialNumber = 0;
} else if (currentChar == 0x003) {
Serial.print(serialNumber, DEC);
Serial.print(" ");
} else {
if ((charIndex >= 1) && (charIndex < 5)) {
serialNumber <<= 8;
serialNumber += currentChar;
}
}
}
}
möglichen Weg, denke ich? http://stackoverflow.com/questions/11848921/arduino-rfid-checksum-calculation-and-key-visualisierung – jmercier