如何在Arduino上获得PICC序列号

时间:2014-03-25 21:12:34

标签: arduino electronics

我如何从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"); 
   }
 }

谢谢你们..任何帮助将不胜感激

2 个答案:

答案 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);