Need to exit this loop, to then be ready to start again.

I had seen that GITHUB link but it does not seem to have documentation to explain each of the library's functions so I don't know if there are other functions that would be more helpful for your project.

I have had a look at the full-length program in Reply #17 and I have restructured it in two steps to try to make the functioning more obvious so it can be adapted to your needs. Obviously I have been unable to test my changes.

The purpose of the following two versions is to try to enable you to understand how the second version evolved from the version in Reply #17. In the first case I have eliminated the return statements and just use regular IF/ELSE. That should not change the functionality, but I hope it will be clearer.

In the second example I have moved a large chunk of code into a function just so that it does not clutter up loop(). And it should (I hope) suggest a pattern that you can use to add extra functionality for when the card is removed.

First Version

/*
 * Initial Author: ryand1011 (https://github.com/ryand1011)
 *
 * Reads data written by a program such as "rfid_write_personal_data.ino"
 *
 * See: https://github.com/miguelbalboa/rfid/tree/master/examples/rfid_write_personal_data
 *
 * Uses MIFARE RFID card using RFID-RC522 reader
 * Uses MFRC522 - Library
 * -----------------------------------------------------------------------------------------
 *             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
    SPI.begin();                                                  // Init SPI bus
    mfrc522.PCD_Init();                                              // Init MFRC522 card
}
void PrintHex(uint8_t *data, uint8_t length) // prints 8-bit data in hex with leading zeroes
{
         char tmp[16];
             for (int i=0; i<length; i++) {
                 sprintf(tmp, "0x%.2X",data[i]);
                 Serial.print(tmp); Serial.print(" ");
             }
}
uint8_t buf[10]= {};
MFRC522::Uid id;
MFRC522::Uid id2;
bool is_card_present = false;
//*****************************************************************************************//

void cpid(MFRC522::Uid *id){
    memset(id, 0, sizeof(MFRC522::Uid));
    memcpy(id->uidByte, mfrc522.uid.uidByte, mfrc522.uid.size);
    id->size = mfrc522.uid.size;
    id->sak = mfrc522.uid.sak;
}

bool cmpid(MFRC522::Uid *id1, MFRC522::Uid *id2){
    return memcmp(id1, id2, sizeof(MFRC522::Uid));
}

void deregister_card(){
    is_card_present = false;
    memset(&id,0, sizeof(id));
}
uint8_t control = 0x00;


void loop() {

    MFRC522::MIFARE_Key key;
    for (byte i = 0; i < 6; i++) {
        key.keyByte[i] = 0xFF;
    }
    MFRC522::StatusCode status;

    //-------------------------------------------

    // Look for new cards
    if ( !mfrc522.PICC_IsNewCardPresent()) {
        // do nothing;
    }
    else {
        if ( !mfrc522.PICC_ReadCardSerial()) {
            // do nothing;
        }
        else {
            //PrintHex(id.uidByte, id.size);
            //Serial.println("hello");
            bool result = true;
            uint8_t buf_len=4;
            cpid(&id);
            Serial.print("NewCard ");
            qPrintHex(id.uidByte, id.size);
            Serial.println("");
            while(true){
                control=0;
                for(int i=0; i<3; i++){
                    if(!mfrc522.PICC_IsNewCardPresent()){
                        if(mfrc522.PICC_ReadCardSerial()){
                                //Serial.print('a');
                            control |= 0x16;
                        }
                        if(mfrc522.PICC_ReadCardSerial()){
                                //Serial.print('b');
                            control |= 0x16;
                        }
                            //Serial.print('c');
                        control += 0x1;
                    }
                        //Serial.print('d');
                    control += 0x4;
                }
                 
                //Serial.println(control);
                if(control == 13 || control == 14){
                    //card is still there
                } 
                else {
                    break;
                }
            }
        }
    }
    Serial.println("CardRemoved");
    delay(500); //change value if you want to read cards faster

    mfrc522.PICC_HaltA();
    mfrc522.PCD_StopCrypto1();
}
//*****************************************************************************************//a

void playMP3() {
        //PrintHex(id.uidByte, id.size);
        //Serial.println("hello");
    bool result = true;
    uint8_t buf_len=4;
    cpid(&id);
    Serial.print("NewCard ");
    qPrintHex(id.uidByte, id.size);
    Serial.println("");
    while(true){
        control=0;
        for(int i=0; i<3; i++){
            if(!mfrc522.PICC_IsNewCardPresent()){
                if(mfrc522.PICC_ReadCardSerial()){
                        //Serial.print('a');
                    control |= 0x16;
                }
                if(mfrc522.PICC_ReadCardSerial()){
                        //Serial.print('b');
                    control |= 0x16;
                }
                    //Serial.print('c');
                control += 0x1;
            }
                //Serial.print('d');
            control += 0x4;
        }
         
        //Serial.println(control);
        if(control == 13 || control == 14){
            //card is still there
        } 
        else {
            break;
        }
    }
}

Second Version in next Reply

...R