如何使用RFID阅读器获取RFID标签上打印的序列号?

问题描述:

如何通过RFID阅读器获取打印在RFID标签上的序列号?如何使用RFID阅读器获取RFID标签上打印的序列号?

我:

  • 的Arduino UNO,
  • RMD 6300阅读器,以及
  • RFID标签(125KHZ)。

我使用下面的代码:

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

我得到这个值:

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

但下面的值被打印在RFID标签:

0003034786 

我会想要这个号码,但我不知道如何转换它。

+0

我猜可能吗? http://*.com/questions/11848921/arduino-rfid-checksum-calculation-and-key-visualization – jmercier

您当前得到的值是编码为US-ASCII字符串的序列号。十进制(正如您当前打印)值是

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

将这些字节为十六进制形式(更好的可读性)导致:

 
02 30 39 30 30 32 45 34 45 41 32 43 42 03 

US-ASCII编码这些字节导致此字符串:

 
<STX>09002E4EA2CB<ETX> 

请注意,您也可以通过使用

0直接接收您的控制台上的这种形式
Serial.write(i); 

代替Serial.print(i, DEC);

因此,读者开始通过发送启动传输的-(STX)字符(0×02)输出的序列号,并结束与结束传输发送序列号( ETX)字符。之间的一切是序列号(表示为十六进制字符):

 
09002E4EA2CB 

印在键(0003034786)的序列号是唯一的完整的序列号的一小部分。该值是十进制表示。如果转换

 
0003034786 

其十六进制表示,你

 
002E4EA2 

此值包含在您从阅读器接收的序列号:

 
09002E4EA2CB 

因此,可以按照这样的方式打印该值(如果需要前导零,则使用sprintf()):

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