RFID-RC522 not reading card

I have a RFID-RC522 (MF-RC522) module and I'm using Arduino sketch program. I have downloaded the Example code:

/*
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read data from a PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 * 
 * 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.
 * 
 * @license Released into the public domain.
 * 
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       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          // Configurable, see typical pin layout above
#define SS_PIN          10         // Configurable, see typical pin layout above

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

void setup() {
    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
    mfrc522.PCD_Init();     // Init MFRC522
    mfrc522.PCD_DumpVersionToSerial();  // Show details of PCD - MFRC522 Card Reader details
    Serial.println(F("Scan PICC to see UID, SAK, 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));
}

When I execute it, I get the message:

Firmware Version: 0x0 = (unknown)

WARNING: Communication failure, is the MFRC522 properly connected?

Scan PICC to see UID, SAK, type, and data blocks...

I have re-checked the connections a thousand time but it's not working, the pins are connected as the example says to, and the LED D1 is on (red). Does anyone can help me?

Upvotes: -1

Views: 30650

Answers (4)

ewebbers
ewebbers

Reputation: 21

UNO solution worked with me

  • Reset Bin is 5 not 10
  • Use 5V not 3.3v

Arduino forum Solution with explanation

Upvotes: 1

SalFar
SalFar

Reputation: 9

Try this code


     #include <RFID.h>

    /*
    * 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/SDA: Pin 10
    * RST: Pin 9
    */

    #include <SPI.h>
    #include <RFID.h>

    #define SS_PIN 10
    #define RST_PIN 9

    RFID rfid(SS_PIN,RST_PIN);


    int self = 7;
    int bat = 8; 
    int s = 6;

    int serNum[5];
    int cards[][5] = {
      {42,249,70,213,64}

    };

    bool access = false;

    void setup(){

        Serial.begin(9600);
        SPI.begin();
        rfid.init();

        pinMode(self, OUTPUT);
        pinMode(bat ,OUTPUT);
        pinMode(s,OUTPUT);


        digitalWrite(self, LOW);
        digitalWrite(bat , LOW);

    }

    void loop(){

        if(rfid.isCard()){

            if(rfid.readCardSerial()){
                Serial.print(rfid.serNum[0]);
                Serial.print(" ");
                Serial.print(rfid.serNum[1]);
                Serial.print(" ");
                Serial.print(rfid.serNum[2]);
                Serial.print(" ");
                Serial.print(rfid.serNum[3]);
                Serial.print(" ");
                Serial.print(rfid.serNum[4]);
                Serial.println("");

                for(int x = 0; x < sizeof(cards); x++){
                  for(int i = 0; i < sizeof(rfid.serNum); i++ ){
                      if(rfid.serNum[i] != cards[x][i]) {
                          access = false;
                          break;
                      } else {
                          access = true;
                      }
                  }
                  if(access) break;
                }

            }

           if(access){
              Serial.println("Welcome!");
              digitalWrite(bat,HIGH);
              digitalWrite(self,HIGH);
              delay(1000);
              digitalWrite(self,LOW);

          } else {
               Serial.println("Not allowed!");
              digitalWrite(s,HIGH);
              delay(2000);
              digitalWrite(s,LOW); 
              digitalWrite(bat,LOW);

           }        
        }



        rfid.halt();`enter code here`

    }

Upvotes: -2

Chamiz
Chamiz

Reputation: 54

This issue is due to incorrect wiring or loose contacts to RFID sensor. You need to solder contact to get results.

Also, choose appropriate PINS for your Arduino board.

Upvotes: 0

Macobse
Macobse

Reputation: 31

If anybody looking for a solution...

Step-1: Change the RST pin to 5 if you are using Arduino Uno or use RST pin 9 in Arduino Mega. the other pins remains the same.
Step-2:Download AddicoreRFID library.
Step-3: Open the Arduino IDE and navigate to Sketch > Include the Library using “Add .ZIP Library…” option.
Step-4: Restart the Arduino IDE (close and open again)
Step-5: Inside Arduino IDE Navigate to File > Examples > AddicoreRFID. Select the “Addicore_RFID_Example” sketch and upload the sketch
Step-6: Open the Serial window and select "Both NL & CR" and select "9600" for the baud rate option

Detail explanation can be found at link

Upvotes: 3

Related Questions