Created
November 4, 2015 07:58
-
-
Save avtehnik/0b218cd75f1d7a6465d7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* ---------------------------------------------------------------------------- | |
* This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid | |
* for further details and other examples. | |
* | |
* NOTE: The library file MFRC522.h has a lot of useful info. Please read it. | |
* | |
* Released into the public domain. | |
* ---------------------------------------------------------------------------- | |
* Example sketch/program showing how to read data from a PICC (that is: a RFID | |
* Tag or Card) using a MFRC522 based RFID Reader on the Arduino SPI interface. | |
* | |
* When the Arduino and the MFRC522 module are connected (see the pin layout | |
* below), load this sketch into Arduino IDE then verify/compile and upload it. | |
* To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). | |
* When you present a PICC (that is: a RFID Tag or Card) at reading distance | |
* of the MFRC522 Reader/PCD, the serial output will show the ID/UID, type and | |
* any data blocks it can read. Note: you may see "Timeout in communication" | |
* messages when removing the PICC from reading distance too early. | |
* | |
* If your reader supports it, this sketch/program will read all the PICCs | |
* presented (that is: multiple tag reading). So if you stack two or more | |
* PICCs on top of each other and present them to the reader, it will first | |
* output all details of the first and then the next PICC. Note that this | |
* may take some time as all data blocks are dumped, so keep the PICCs at | |
* reading distance until complete. | |
* | |
* Typical pin layout used: | |
* ----------------------------------------------------------------------------------------- | |
* MFRC522 Arduino Arduino Arduino Arduino Arduino | |
* Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro | |
* Signal Pin Pin Pin Pin Pin Pin | |
* ----------------------------------------------------------------------------------------- | |
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST | |
* SPI SS SDA(SS) 10 53 D10 10 10 | |
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 | |
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 | |
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 | |
*/ | |
#include <SPI.h> | |
#include <MFRC522.h> | |
#define RST_PIN 9 // | |
#define SS_PIN 10 // | |
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance | |
void setup() { | |
pinMode(10, OUTPUT); | |
Serial.begin(9600); // Initialize serial communications with the PC | |
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) | |
SPI.begin(); // Init SPI bus | |
pinMode(10, OUTPUT); | |
SPI.setClockDivider(SPI_CLOCK_DIV128); | |
byte tmp; | |
mfrc522.PCD_WriteRegister(mfrc522.TPrescalerReg, 0x3E); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25�s. | |
tmp = mfrc522.PCD_ReadRegister(mfrc522.TPrescalerReg); | |
Serial.print("TPrescalerReg "); | |
Serial.println(tmp, HEX); | |
mfrc522.PCD_WriteRegister(mfrc522.TReloadRegH, 0); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. | |
tmp = mfrc522.PCD_ReadRegister(mfrc522.TReloadRegH); | |
Serial.print("TReloadRegH "); | |
Serial.println(tmp, HEX); | |
mfrc522.PCD_WriteRegister(mfrc522.TReloadRegL, 30); | |
tmp = mfrc522.PCD_ReadRegister(mfrc522.TReloadRegL); | |
Serial.print("TReloadRegL "); | |
Serial.println(tmp, HEX); | |
mfrc522.PCD_WriteRegister(mfrc522.ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) | |
tmp = mfrc522.PCD_ReadRegister(mfrc522.ModeReg); | |
Serial.print("ModeReg "); | |
Serial.println(tmp, HEX); | |
tmp = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); | |
Serial.print("VersionReg "); | |
Serial.println(tmp, HEX); | |
mfrc522.PCD_Init(); // Init MFRC522 | |
ShowReaderDetails(); // Show details of PCD - MFRC522 Card Reader details | |
Serial.println(F("Scan PICC to see UID, type, and data blocks...")); | |
} | |
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)); | |
} | |
void ShowReaderDetails() { | |
// Get the MFRC522 software version | |
byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); | |
Serial.print(F("MFRC522 Software Version: 0x")); | |
Serial.print(v, HEX); | |
if (v == 0x91) | |
Serial.print(F(" = v1.0")); | |
else if (v == 0x92) | |
Serial.print(F(" = v2.0")); | |
else | |
Serial.print(F(" (unknown)")); | |
Serial.println(""); | |
// When 0x00 or 0xFF is returned, communication probably failed | |
if ((v == 0x00) || (v == 0xFF)) { | |
Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?")); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment