2015-09-29 6 views
4

У меня есть модуль RFID-RC522 (MF-RC522), и я использую программу эскиза Arduino. Чтобы использовать этот RFID, я загрузил библиотеку Arduino MFRC522.Как получить идентификатор RFID в Arduino?

И запустил пример кода библиотеки.

Вот код.

/* 
* 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    51    MOSI 
* SPI MISO 12    50    MISO 
* SPI SCK 13    52    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)); 
} 

Когда я запускаю этот код и поместить одну из карты в считыватель RFID, много информации шоу на серийный монитор Arduino IDE. Что-то вроде этого ... (я не мог отправлять изображения)

// 
Scan PICC to see UID and type... 

Card UID : 84 90 6C A7 

PICC type : MIFARE 1KB 

Sector Block 0 1 2 3 4 5 6 7 ... 

15  63 00 00 00 00 ... 
// 

Но что мне нужно это только UID карты. Этот случай составляет 84 90 6C A7.

На самом деле, у меня есть проект. Я хочу включить светодиод, если я ставлю определенную карту RFID. Для этого мне нужно прочитать UID карты и присвоить это некоторой переменной в программе эскиза Arduino.

Но я не знаю, как получить UID метки RFID в этом случае (эта библиотека и функции сложны для меня).

Если кто-нибудь знает, как это сделать, пожалуйста, помогите мне.

ответ

4

Это непроверенный код, так как у меня нет Arduino, доступного прямо сейчас. Надеюсь это работает.

Замените код DumpToSerial в вашем примере с чем-то вроде этого

if (mfrc522.uid.uidByte[0] == 0x84 && mfrc522.uid.uidByte[1] == 0x90 && mfrc522.uid.uidByte[2] == 0x6c && mfrc522.uid.uidByte[3] == 0xa7) { // turn your LED on }

+0

Спасибо! Оно работает. Это то, чего я хочу. –

5

Здесь есть функция, которая возвращает UID.

/** 
* mfrc522.PICC_IsNewCardPresent() should be checked before 
* @return the card UID 
*/ 
unsigned long getID(){ 
    if (! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue 
    return -1; 
    } 
    unsigned long hex_num; 
    hex_num = mfrc522.uid.uidByte[0] << 24; 
    hex_num += mfrc522.uid.uidByte[1] << 16; 
    hex_num += mfrc522.uid.uidByte[2] << 8; 
    hex_num += mfrc522.uid.uidByte[3]; 
    mfrc522.PICC_HaltA(); // Stop reading 
    return hex_num; 
} 

Используйте это так:

if(mfrc522.PICC_IsNewCardPresent()) { 
    unsigned long uid = getID(); 
    if(uid != -1){ 
    Serial.print("Card detected, UID: "); Serial.println(uid); 
    } 
} 

На основании ответа Томас Мэтьюз в similar discussion.

+0

Я получаю эту ошибку при компиляции: 'warning: left shift count> = width of type hex_num = mfrc522.uid.uidByte [0] << 24' – yentsun

0

вы можете получить его, делая это:

mfrc522.uid.uidByte 

и это байт [10]

 Смежные вопросы

  • Нет связанных вопросов^_^