La valeur que vous obtenez actuellement est le numéro de série codé en tant que chaîne US-ASCII. La valeur en décimal (comme l'impression actuellement il) est
2 48 57 48 48 50 69 52 69 65 50 67 66 3
La conversion de ces octets en forme hexadécimale (pour une meilleure lisibilité) conduit à:
02 30 39 30 30 32 45 34 45 41 32 43 42 03
codant pour ces octets dans US-ASCII conduit à cette chaîne:
<STX>09002E4EA2CB<ETX>
Notez que vous pouvez également recevoir ce formulaire directement sur votre console à l'aide
Serial.write(i);
au lieu de Serial.print(i, DEC);
Ainsi, votre lecteur commence la sortie le numéro de série en envoyant un début de transmission (STX) caractère (0x02) et se termine l'envoi du numéro de série avec une fin de transmission (ETX). Tout est entre le numéro de série (représenté sous forme de caractères hexadécimaux):
09002E4EA2CB
Le numéro de série imprimé sur votre clé (0003034786) ne représente qu'une fraction du numéro de série complet. Cette valeur est la représentation décimale.Si vous convertissez
0003034786
à sa représentation hexadécimale, vous obtenez
002E4EA2
Cette valeur est contenue dans le numéro de série que vous avez reçu du lecteur:
09002E4EA2CB
Par conséquent, vous pouvez faire quelque chose comme ceci pour imprimer la valeur (utiliser sprintf()
, si vous avez besoin des zéros de tête):
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;
}
}
}
}
façon possible je suppose? http://stackoverflow.com/questions/11848921/arduino-rfid-checksum-calculation-and-key-visualization – jmercier