Ich habe ein RFID-RC522-Modul (MF-RC522) und verwende das Arduino-Skizzenprogramm .. Um diese RFID zu verwenden, habe ich die Arduino-Bibliothek MFRC522 heruntergeladen.
Und ich führe den Beispielcode der Bibliothek aus.
Hier ist der Code.
/*
* 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));
}
Wenn Sie diesen Code ausführen und eine der Karten in den RFID-Leser stecken, werden auf dem seriellen Monitor der Arduino IDE viele Informationen angezeigt. So etwas ... (ich konnte die Bilder nicht posten)
//
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 ...
//
Was ich aber brauche, ist nur die Karten-UID. Dieser Fall ist 84 90 6C A7.
Eigentlich habe ich ein Projekt. Ich möchte die LED einschalten, wenn ich eine bestimmte RFID-Karte einlege. Dazu muss ich die Karten-UID lesen und diese einer Variablen des Arduino-Skizzenprogramms zuweisen.
Ich weiß jedoch nicht, wie ich die UID des RFID-Tags in diesem Fall erhalten kann (Diese Bibliothek und Funktionen sind für mich kompliziert).
Wenn jemand weiß, wie das geht, helfen Sie mir bitte.
Dies ist ungetesteter Code, da mir momentan kein Arduino zur Verfügung steht. Ich hoffe es klappt.
Ersetzen Sie den DumpToSerial-Code in Ihrem Beispiel durch etwas Ähnliches
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
}
Hier ist eine Funktion, die die UID zurückgibt.
/**
* 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;
}
Verwenden Sie es so:
if(mfrc522.PICC_IsNewCardPresent()) {
unsigned long uid = getID();
if(uid != -1){
Serial.print("Card detected, UID: "); Serial.println(uid);
}
}
Basierend auf der Antwort von Thomas Matthews in einer ähnlichen Diskussion .
sie können es dadurch bekommen:
mfrc522.uid.uidByte
und es ist ein byte [10]
Ich habe einen anderen Weg gefunden.
In der Bibliothek MFRC522.cpp in Zeile 1391
Serial.print(F("Card UID:"));
for (byte i = 0; i < uid->size; i++)
Ich habe eine weitere Funktion aus diesem Funktionsaufruf gemacht: PICC_DumpDetailsToSerialUid(Uid *uid)
Es sieht aus wie:
//This is just for read UID!
void MFRC522::PICC_DumpDetailsToSerialUid(Uid *uid){
Serial.print(F("Card JUST UID :"));
for (byte i = 0; i < uid->size; i++) {
if(uid->uidByte[i] < 0x10)
Serial.print(F(" 0"));
else
Serial.print(F(" "));
Serial.print(uid->uidByte[i], HEX);
}
Serial.println();
}
Sie können es überall dort ablegen, wo Sie es brauchen, ich lege es einfach in die Nähe großer Funktionen, um zu wissen, wo es ist.
Nachdem Sie diese Funktion hinzugefügt haben, müssen Sie in MFRC522.h library in Zeile 409 gehen und hinzufügen
void PICC_DumpDetailsToSerialUid(Uid *uid);
Nach diesen beiden Bearbeitungen in dieser Bibliothek können Sie die gewünschte Funktion aufrufen.
Rufen Sie es in Arduino mit: mfrc522.PICC_DumpDetailsToSerialUid(&(mfrc522.uid));
auf, und Sie haben nur eine Funktion für die UID.
Sie können das mit anderen Funktionen tun, wenn Sie etwas anderes brauchen .... Viel Glück :)