我如何从PICC标签获取序列号?
我目前正在使用带有Arduino Uno的RFID-RC522卡,其库可以找到here ..所以希望这有帮助...这是我的软件和引脚布局..你可以看到我试图将序列加载到字符串中,但无济于事:
/*
* MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
* The library file MFRC522.h has a wealth of useful info. Please read it.
* The functions are documented in MFRC522.cpp.
*
* Based on code Dr.Leong ( WWW.B2CQSHOP.COM )
* Created by Miguel Balboa (circuitito.com), Jan, 2012.
* Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.)
* Released into the public domain.
* Sample program showing how to read data from a PICC using a MFRC522 reader on the Arduino SPI interface.
*----------------------------------------------------------------------------- empty_skull
* Aggiunti pin per arduino Mega
* add pin configuration for arduino mega
* http://mac86project.altervista.org/
----------------------------------------------------------------------------- Nicola Coppola
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 52 MOSI
* SPI MISO 12 51 MISO
* SPI SCK 13 50 SCK
*
* The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println("Scan PICC to see UID and type...");
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Dump debug info about the card. PICC_HaltA() is automatically called.
//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
String data = mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
if (data.substring(0) == "43 6F F6 A4") {
Serial.print("Welcome Adam");
} else {
Serial.print("Invalid card, please try again");
}
}
谢谢你们..任何帮助将不胜感激
答案 0 :(得分:3)
试试这个:
String rfidUid = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
rfidUid += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUid += String(mfrc522.uid.uidByte[i], HEX);
}
Serial.println(rfidUid);
if (rfidUid == "436ff6a4") {
...
变量 rfidUid 将UID包含为一个小写字母且没有空格的字符串。
示例: 5c022e31
如果格式必须使用大写字母和空格,则可以使用 sprintf 取得成功。
答案 1 :(得分:1)
上述方法仅在您阅读一次时才有效,否则uid会在每次阅读时叠加。我尝试了这种方法,它做了我想要的,将uid读入数组
data[i]=mfrc522.uid.uidByte[i];
然后转换为字符串
code=String(data[0],HEX)+...+String(data[i],HEX);
code.toUpperCase();Serial.println(code);