2016-06-07 41 views
1

Wie kann ich die Seriennummer, die auf einem RFID-Tag gedruckt wird, über einen RFID-Leser erhalten?Wie bekomme ich die Seriennummer auf RFID-Tag mit RFID-Leser gedruckt?

ich habe:

  • Arduino uno,
  • RMD 6300 Leser und
  • RFID-Tag (125Khz).

Ich verwende den folgenden Code ein:

#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(" "); 
    } 
} 

ich diesen Wert:

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

Aber der folgende Wert wird auf dem RFID-Tag gedruckt:

0003034786 

I Ich möchte diese Nummer haben, aber ich weiß nicht, wie ich sie umwandeln soll.

+0

möglichen Weg, denke ich? http://stackoverflow.com/questions/11848921/arduino-rfid-checksum-calculation-and-key-visualisierung – jmercier

Antwort

2

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