如何使用 RFID reader 获取打印在 RFID 标签上的序列号?
How can I get the serial number printed on RFID tag with RFID reader?
如何通过 RFID reader 获取打印在 RFID 标签上的序列号?
我有:
- Arduino uno,
- 6300 马币reader,以及
- 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>
请注意,您也可以使用
直接在控制台上接收此表单
Serial.write(i);
而不是Serial.print(i, DEC);
因此,您的 reader 通过发送传输开始 (STX) 字符 (0x02) 开始输出序列号,并使用传输结束 (ETX) 字符结束发送序列号.中间的所有内容都是序列号(以十六进制字符表示):
09002E4EA2CB
印在钥匙上的序列号 (0003034786) 只是完整序列号的一小部分。该值是十进制表示法。如果你转换
0003034786
到它的十六进制表示,你得到
002E4EA2
此值包含在您从 reader 收到的序列号中:
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;
}
}
}
}
如何通过 RFID reader 获取打印在 RFID 标签上的序列号?
我有:
- Arduino uno,
- 6300 马币reader,以及
- 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>
请注意,您也可以使用
直接在控制台上接收此表单Serial.write(i);
而不是Serial.print(i, DEC);
因此,您的 reader 通过发送传输开始 (STX) 字符 (0x02) 开始输出序列号,并使用传输结束 (ETX) 字符结束发送序列号.中间的所有内容都是序列号(以十六进制字符表示):
09002E4EA2CB
印在钥匙上的序列号 (0003034786) 只是完整序列号的一小部分。该值是十进制表示法。如果你转换
0003034786
到它的十六进制表示,你得到
002E4EA2
此值包含在您从 reader 收到的序列号中:
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;
}
}
}
}