如何使用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
我会想要这个号码,但我不知道如何转换它。
答
您当前得到的值是编码为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;
}
}
}
}
我猜可能吗? http://*.com/questions/11848921/arduino-rfid-checksum-calculation-and-key-visualization – jmercier