2016-06-07 4 views
1

Comment puis-je obtenir le numéro de série imprimé sur une étiquette RFID via un lecteur RFID?Comment puis-je imprimer le numéro de série sur une étiquette RFID avec un lecteur RFID?

J'ai:

  • Arduino uno,
  • lecteur RMD 6300 et
  • étiquette RFID (125Khz).

J'utilise le code suivant:

#include <SoftwareSerial.h> 
SoftwareSerial RFID(2, 3); // RX and TX 

int i; 

void setup() 
{ 
    RFID.begin(9600); // start serial to RFID reader 
    Serial.begin(9600); // start serial to PC 
} 

void loop() 
{ 
    if (RFID.available() > 0) 
    { 
    i = RFID.read(); 
    Serial.print(i, DEC); 
    Serial.print(" "); 
    } 
} 

Je reçois cette valeur:

2 48 57 48 48 50 69 52 69 65 50 67 66 3 

Mais la valeur suivante est imprimée sur l'étiquette RFID:

0003034786 

I Je voudrais avoir ce numéro, mais je ne sais pas comment le convertir.

+0

façon possible je suppose? http://stackoverflow.com/questions/11848921/arduino-rfid-checksum-calculation-and-key-visualization – jmercier

Répondre

2

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; 
      } 
     } 
    } 
}