diff --git a/examples/DumpInfo/DumpInfo.ino b/examples/DumpInfo/DumpInfo.ino new file mode 100644 index 0000000..2c5ee35 --- /dev/null +++ b/examples/DumpInfo/DumpInfo.ino @@ -0,0 +1,52 @@ +/* + * 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. + * Pin layout should be as follows: + * Signal Pin Pin + * Arduino Uno MFRC522 board + * ----------------------------------------- + * Reset 9 RST + * SPI SS 10 SDA + * SPI MOSI 11 MOSI + * SPI MISO 12 MISO + * SPI SCK 13 SCK + * + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +#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)); +} diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino new file mode 100644 index 0000000..9b806ba --- /dev/null +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -0,0 +1,197 @@ +/* + * 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. + * + * This sample shows how to setup a block on a MIFARE Classic PICC to be in "Value Block" mode. + * In Value Block mode the operations Increment/Decrement/Restore and Transfer can be used. + * + * Pin layout should be as follows: + * Signal Pin Pin + * Arduino Uno MFRC522 board + * ----------------------------------------- + * Reset 9 RST + * SPI SS 10 SDA + * SPI MOSI 11 MOSI + * SPI MISO 12 MISO + * SPI SCK 13 SCK + * + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +#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 a MIFARE Classic PICC to demonstrate Value Blocks."); +} + +void loop() { + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) { + return; + } + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) { + return; + } + // Now a card is selected. The UID and SAK is in mfrc522.uid. + + // Dump UID + Serial.print("Card UID:"); + for (byte i = 0; i < mfrc522.uid.size; i++) { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.println(); + + // Dump PICC type + byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.print("PICC type: "); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI + && piccType != MFRC522::PICC_TYPE_MIFARE_1K + && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { + Serial.println("This sample only works with MIFARE Classic cards."); + return; + } + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + MFRC522::MIFARE_Key key; + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + + // In this sample we use the second sector (ie block 4-7). + byte sector = 1; + byte valueBlockA = 5; + byte valueBlockB = 6; + byte trailerBlock = 7; + + // Authenticate using key A. + Serial.println("Authenticating using key A..."); + byte status; + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // We need a sector trailer that defines blocks 5 and 6 as Value Blocks and enables key B. + byte trailerBuffer[] = { 255,255,255,255,255,255, 0,0,0, 0, 255,255,255,255,255,255}; // Keep default keys. + // g1=6 => Set block 5 as value block. Must use Key B towrite & increment, A or B can be used for derement. + // g2=6 => Same thing for block 6. + // g3=3 => Key B must be used to modify the Sector Trailer. Key B becomes valid. + mfrc522.MIFARE_SetAccessBits(&trailerBuffer[6], 0, 6, 6, 3); + + // Now we read the sector trailer and see if it is like we want it to be. + Serial.println("Reading sector trailer..."); + byte buffer[18]; + byte size = sizeof(buffer); + status = mfrc522.MIFARE_Read(trailerBlock, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + if ( buffer[6] != trailerBuffer[6] + && buffer[7] != trailerBuffer[7] + && buffer[8] != trailerBuffer[8]) { + Serial.println("Writing new sector trailer..."); + status = mfrc522.MIFARE_Write(trailerBlock, trailerBuffer, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + } + + // Authenticate using key B. + Serial.println("Authenticating again using key B..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Value blocks has a 32 bit signed value stored three times and an 8 bit address stored 4 times. + // Make sure blocks valueBlockA and valueBlockB has that format. + formatBlock(valueBlockA); + formatBlock(valueBlockB); + + // Add 1 to the value of valueBlockA and store the result in valueBlockA. + Serial.print("Adding 1 to value of block "); Serial.println(valueBlockA); + status = mfrc522.MIFARE_Increment(valueBlockA, 1); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Increment() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + status = mfrc522.MIFARE_Transfer(valueBlockA); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Transfer() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Dump the result + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + + // Halt PICC + mfrc522.PICC_HaltA(); + + // Stop encryption on PCD + mfrc522.PCD_StopCrypto1(); +} + +void formatBlock(byte blockAddr) { + Serial.print("Reading block "); Serial.println(blockAddr); + byte buffer[18]; + byte size = sizeof(buffer); + byte status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + if ( (buffer[0] == (byte)~buffer[4]) + && (buffer[1] == (byte)~buffer[5]) + && (buffer[2] == (byte)~buffer[6]) + && (buffer[3] == (byte)~buffer[7]) + + && (buffer[0] == buffer[8]) + && (buffer[1] == buffer[9]) + && (buffer[2] == buffer[10]) + && (buffer[3] == buffer[11]) + + && (buffer[12] == (byte)~buffer[13]) + && (buffer[12] == buffer[14]) + && (buffer[12] == (byte)~buffer[15])) { + Serial.println("Block has correct Block Value format."); + } + else { + Serial.println("Writing new value block..."); + byte valueBlock[] = { 0,0,0,0, 255,255,255,255, 0,0,0,0, blockAddr,~blockAddr,blockAddr,~blockAddr }; + status = mfrc522.MIFARE_Write(blockAddr, valueBlock, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + } +} // End formatBlock() \ No newline at end of file diff --git a/examples/cardDisplay/cardDisplay.ino b/examples/cardDisplay/cardDisplay.ino deleted file mode 100644 index 7fb22f3..0000000 --- a/examples/cardDisplay/cardDisplay.ino +++ /dev/null @@ -1,126 +0,0 @@ -/** -* Read a card using a mfrc522 reader on your SPI interface -* Pin layout should be as follows (on Arduino Uno): -* MOSI: Pin 11 / ICSP-4 -* MISO: Pin 12 / ICSP-1 -* SCK: Pin 13 / ISCP-3 -* SS: Pin 10 -* RST: Pin 9 -* -* Script is based on the script of Miguel Balboa. -* Serial number is shown on a HD44780 compatible display -* -* The circuit: -* LCD RS pin to digital pin (7) -* LCD Enable pin to digital pin (6) -* LCD D4 pin to digital pin 5 -* LCD D5 pin to digital pin 4 -* LCD D6 pin to digital pin 3 -* LCD D7 pin to digital pin 2 -* LCD R/W pin to ground -* 10K resistor: -* ends to +5V and ground -* wiper to LCD VO pin (pin 3) -* -* @version 0.1 -* @author Henri de Jong -* @since 27-01-2013 -*/ - -#include -#include -#include - -#define SS_PIN 10 -#define RST_PIN 9 - -RFID rfid(SS_PIN, RST_PIN); - -LiquidCrystal lcd(7, 6, 5, 4, 3, 2); - -// Setup variables: - int serNum0; - int serNum1; - int serNum2; - int serNum3; - int serNum4; - -void setup() -{ - Serial.begin(9600); - lcd.begin(16, 2); - SPI.begin(); - rfid.init(); - -} - -void loop() -{ - - if (rfid.isCard()) { - if (rfid.readCardSerial()) { - if (rfid.serNum[0] != serNum0 - && rfid.serNum[1] != serNum1 - && rfid.serNum[2] != serNum2 - && rfid.serNum[3] != serNum3 - && rfid.serNum[4] != serNum4 - ) { - /* With a new cardnumber, show it. */ - Serial.println(" "); - Serial.println("Card found"); - serNum0 = rfid.serNum[0]; - serNum1 = rfid.serNum[1]; - serNum2 = rfid.serNum[2]; - serNum3 = rfid.serNum[3]; - serNum4 = rfid.serNum[4]; - - //Serial.println(" "); - Serial.println("Cardnumber:"); - Serial.print("Dec: "); - Serial.print(rfid.serNum[0],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[1],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[2],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[3],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[4],DEC); - Serial.println(" "); - - Serial.print("Hex: "); - Serial.print(rfid.serNum[0],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[1],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[2],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[3],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[4],HEX); - Serial.println(" "); - - /* Write the HEX code to the display */ - lcd.clear(); - lcd.setCursor(0, 0); - lcd.print("Cardno (hex):"); - lcd.setCursor(0,1); - lcd.print(rfid.serNum[0], HEX); - lcd.print(','); - lcd.print(rfid.serNum[1], HEX); - lcd.print(','); - lcd.print(rfid.serNum[2], HEX); - lcd.print(','); - lcd.print(rfid.serNum[3], HEX); - lcd.print(','); - lcd.print(rfid.serNum[4], HEX); - } else { - /* If we have the same ID, just write a dot. */ - Serial.print("."); - } - } - } - - rfid.halt(); -} - diff --git a/examples/cardRead/cardRead.ino b/examples/cardRead/cardRead.ino deleted file mode 100644 index 4a53eca..0000000 --- a/examples/cardRead/cardRead.ino +++ /dev/null @@ -1,96 +0,0 @@ -/** -* Read a card using a mfrc522 reader on your SPI interface -* Pin layout should be as follows (on Arduino Uno): -* MOSI: Pin 11 / ICSP-4 -* MISO: Pin 12 / ICSP-1 -* SCK: Pin 13 / ISCP-3 -* SS: Pin 10 -* RST: Pin 9 -* -* Script is based on the script of Miguel Balboa. -* New cardnumber is printed when card has changed. Only a dot is printed -* if card is the same. -* -* @version 0.1 -* @author Henri de Jong -* @since 06-01-2013 -*/ - -#include -#include - -#define SS_PIN 10 -#define RST_PIN 9 - -RFID rfid(SS_PIN, RST_PIN); - -// Setup variables: - int serNum0; - int serNum1; - int serNum2; - int serNum3; - int serNum4; - -void setup() -{ - Serial.begin(9600); - SPI.begin(); - rfid.init(); - -} - -void loop() -{ - - if (rfid.isCard()) { - if (rfid.readCardSerial()) { - if (rfid.serNum[0] != serNum0 - && rfid.serNum[1] != serNum1 - && rfid.serNum[2] != serNum2 - && rfid.serNum[3] != serNum3 - && rfid.serNum[4] != serNum4 - ) { - /* With a new cardnumber, show it. */ - Serial.println(" "); - Serial.println("Card found"); - serNum0 = rfid.serNum[0]; - serNum1 = rfid.serNum[1]; - serNum2 = rfid.serNum[2]; - serNum3 = rfid.serNum[3]; - serNum4 = rfid.serNum[4]; - - //Serial.println(" "); - Serial.println("Cardnumber:"); - Serial.print("Dec: "); - Serial.print(rfid.serNum[0],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[1],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[2],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[3],DEC); - Serial.print(", "); - Serial.print(rfid.serNum[4],DEC); - Serial.println(" "); - - Serial.print("Hex: "); - Serial.print(rfid.serNum[0],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[1],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[2],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[3],HEX); - Serial.print(", "); - Serial.print(rfid.serNum[4],HEX); - Serial.println(" "); - } else { - /* If we have the same ID, just write a dot. */ - Serial.print("."); - } - } - } - - rfid.halt(); -} - diff --git a/examples/pruebaLibreriaRFID/pruebaLibreriaRFID.ino b/examples/pruebaLibreriaRFID/pruebaLibreriaRFID.ino deleted file mode 100644 index 4dc26f6..0000000 --- a/examples/pruebaLibreriaRFID/pruebaLibreriaRFID.ino +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include - -RFID rfid(10,5); - -void setup() -{ - Serial.begin(9600); - SPI.begin(); - rfid.init(); - -} - -void loop() -{ - if (rfid.isCard()) { - - Serial.println("IS CARD"); - - if (rfid.readCardSerial()) { - - Serial.println(" "); - Serial.println("El numero de serie de la tarjeta es : "); - Serial.print(rfid.serNum[0],DEC); - Serial.print(" , "); - Serial.print(rfid.serNum[1],DEC); - Serial.print(" , "); - Serial.print(rfid.serNum[2],DEC); - Serial.print(" , "); - Serial.print(rfid.serNum[3],DEC); - Serial.print(" , "); - Serial.print(rfid.serNum[4],DEC); - Serial.println(" "); - - - - } - - } - - rfid.halt(); -}