run repeatedly not work!
i want this wokr repeatedly scan RFID Tag but this still work only one time after i scan the Rfid tag
any problem in code????
code here!
#include <SPI.h>//include the SPI bus library
#include <MFRC522.h>//include the RFID reader library
#define SS_PIN 10Â //slave select pin
#define RST_PIN 5Â //reset pin
MFRC522 mfrc522(SS_PIN, RST_PIN);Â Â Â Â // instatiate a MFRC522 reader object.
MFRC522::MIFARE_Key key;//create a MIFARE_Key struct named 'key', which will hold the card information
void setup() {
    Serial.begin(9600);    // Initialize serial communications with the PC
    SPI.begin();       // Init SPI bus
    mfrc522.PCD_Init();    // Init MFRC522 card (in case you wonder what PCD means: proximity coupling device)
    Serial.println("Scan a MIFARE Classic card");
#include <SPI.h>//include the SPI bus library
#include <MFRC522.h>//include the RFID reader library
#define SS_PIN 10Â //slave select pin
#define RST_PIN 5Â //reset pin
MFRC522 mfrc522(SS_PIN, RST_PIN);Â Â Â Â // instatiate a MFRC522 reader object.
MFRC522::MIFARE_Key key;//create a MIFARE_Key struct named 'key', which will hold the card information
void setup() {
    Serial.begin(9600);    // Initialize serial communications with the PC
    SPI.begin();       // Init SPI bus
    mfrc522.PCD_Init();    // Init MFRC522 card (in case you wonder what PCD means: proximity coupling device)
    Serial.println("Scan a MIFARE Classic card");
   Â
    // Prepare the security key for the read and write functions - all six key bytes are set to 0xFF at chip delivery from the factory.
    // Since the cards in the kit are new and the keys were never defined, they are 0xFF
    // if we had a card that was programmed by someone else, we would need to know the key to be able to access it. This key would then need to be stored in 'key' instead.
    for (byte i = 0; i < 6; i++) {
        key.keyByte[i] = 0xFF;//keyByte is defined in the "MIFARE_Key" 'struct' definition in the .h file of the library
    }
}
int block=2;//this is the block number we will write into and then read. Do not write into 'sector trailer' block, since this can make the block unusable.
byte readbackblock[18];//This array is used for reading out a block. The MIFARE_Read method requires a buffer that is at least 18 bytes to hold the 16 bytes of a block.
void loop()
{
 // Look for new cards
 if ( ! mfrc522.PICC_IsNewCardPresent()) {
  return;
 }
 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
  return;
 }
 Serial.println(F("**Card Detected:**"));
    // Among other things, the PICC_ReadCardSerial() method reads the UID and the SAK (Select acknowledge) into the mfrc522.uid struct, which is also instantiated
    // during this process.
    // The UID is needed during the authentication process
    //The Uid struct:
    //typedef struct {
//byte size; // Number of bytes in the UID. 4, 7 or 10.
//byte uidByte[10];Â Â Â Â Â Â //the user ID in 10 bytes.
//byte sak; // The SAK (Select acknowledge) byte returned from the PICC after successful selection.
    //} Uid;
   Â
    Serial.println("card selected");
    readBlock(block, readbackblock);//read the block back
    Serial.print("STUDENT NAME: ");
    for (int j=0 ; j<16 ; j++)//print the block contents
    {
     Serial.write (readbackblock[j]);//Serial.write() transmits the ASCII numbers as human readable characters to serial monitor
    }
    Serial.println("");
     return ;
   mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid)); //dump some details about the card
    return ;
   Â
}
  Â
int writeBlock(int blockNumber, byte arrayAddress[])
{
 //this makes sure that we only write into data blocks. Every 4th block is a trailer block for the access/security info.
 int largestModulo4Number=blockNumber/4*4;
 int trailerBlock=largestModulo4Number+3;//determine trailer block for the sector
 if (blockNumber > 2 && (blockNumber+1)%4 == 0){Serial.print(blockNumber);Serial.println(" is a trailer block:");return 2;}//block number is a trailer block (modulo 4); quit and send error code 2
 Serial.print(blockNumber);
 Serial.println(" is a data block:");
Â
Â
 byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
 //byte PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid);
 //this method is used to authenticate a certain block for writing or reading
 //command: See enumerations above -> PICC_CMD_MF_AUTH_KEY_A = 0x60 (=1100000),  // this command performs authentication with Key A
 //blockAddr is the number of the block from 0 to 15.
 //MIFARE_Key *key is a pointer to the MIFARE_Key struct defined above, this struct needs to be defined for each block. New cards have all A/B= FF FF FF FF FF FF
 //Uid *uid is a pointer to the UID struct that contains the user ID of the card.
 if (status != MFRC522::STATUS_OK) {
    Serial.print("PCD_Authenticate() failed: ");
    Serial.println(mfrc522.GetStatusCodeName(status));
    return 3;//return "3" as error message
 }
 //it appears the authentication needs to be made before every block read/write within a specific sector.
 //If a different sector is being authenticated access to the previous one is lost.
   Â
 status = mfrc522.MIFARE_Write(blockNumber, arrayAddress, 16);//valueBlockA is the block number, MIFARE_Write(block number (0-15), byte array containing 16 values, number of bytes in block (=16))
 //status = mfrc522.MIFARE_Write(9, value1Block, 16);
 if (status != MFRC522::STATUS_OK) {
     Serial.print("MIFARE_Write() failed: ");
     Serial.println(mfrc522.GetStatusCodeName(status));
     return ;//return "4" as error message
 }
 Serial.println("block was written");
}
int readBlock(int blockNumber, byte arrayAddress[])
{
 int largestModulo4Number=blockNumber/4*4;
 int trailerBlock=largestModulo4Number+3;//determine trailer block for the sector
 /*****************************************authentication of the desired block for access***********************************************************/
 byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
 //byte PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid);
 //this method is used to authenticate a certain block for writing or reading
 //command: See enumerations above -> PICC_CMD_MF_AUTH_KEY_A = 0x60 (=1100000),  // this command performs authentication with Key A
 //blockAddr is the number of the block from 0 to 15.
 //MIFARE_Key *key is a pointer to the MIFARE_Key struct defined above, this struct needs to be defined for each block. New cards have all A/B= FF FF FF FF FF FF
 //Uid *uid is a pointer to the UID struct that contains the user ID of the card.
 if (status != MFRC522::STATUS_OK) {
    Serial.print("PCD_Authenticate() failed (read): ");
    Serial.println(mfrc522.GetStatusCodeName(status));
    return ;//return "3" as error message
 }
 //it appears the authentication needs to be made before every block read/write within a specific sector.
 //If a different sector is being authenticated access to the previous one is lost.
 /*****************************************reading a block***********************************************************/
   Â
 byte buffersize = 18;//we need to define a variable with the read buffer size, since the MIFARE_Read method below needs a pointer to the variable that contains the size...
 status = mfrc522.MIFARE_Read(blockNumber, arrayAddress, &buffersize);//&buffersize is a pointer to the buffersize variable; MIFARE_Read requires a pointer instead of just a number
 if (status != MFRC522::STATUS_OK) {
     Serial.print("MIFARE_read() failed: ");
     Serial.println(mfrc522.GetStatusCodeName(status));
     return ;//return "4" as error message
 }
 Serial.println("block was read");
}
But run repeatedly not work!
i want this wokr repeatedly scan RFID Tag but this still work only one time after i scan the Rfid tag
any problem in code?
Don’t use return like you are doing. Return is for subroutines to return a value. The way you are using it, is causing you to drop out of the loop() function.
Look upin the Reference section, how to do an if statement.