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

Robin2:
You need to post the latest version of your program so I can keep up with you.

...R

Sorry

/*
   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



//mp3 player
#include<SoftwareSerial.h>
int mp3Pin[2] = { 5, 4 };           //Rx/Rx

// For the checksum to the mp3
#define startByte 0x7E
#define endByte 0xEF
#define versionByte 0xFF
#define dataLength 0x06
#define infoReq 0x01

SoftwareSerial mp3(mp3Pin[0], mp3Pin[1]); // Rx, Tx




//*****************************************************************************************//
void setup() {
  Serial.begin(9600);                                           // Initialize serial communications with the PC
  SPI.begin();                                                  // Init SPI bus
  mfrc522.PCD_Init();                                              // Init MFRC522 card


  //Mp3
  mp3.begin(9600);                        // Init mp3
  delay(1000);
  sendMP3Command(0x3F, 0, 0);             // Send request for initialization parameters
  sendMP3Command(0x06, 0, 20);            // Vol set to 30
  sendMP3Command(0x07, 0, 0);             // EQ = pop


}
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()) {
    fadeOutMP3();
  }
  else {
    if ( !mfrc522.PICC_ReadCardSerial()) {
      // do nothing;
    }
    else {
      checkCard();
    }
  }
  Serial.println("CardRemoved");
  delay(500); //change value if you want to read cards faster

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

void checkCard() {

  //PrintHex(id.uidByte, id.size);
  //Serial.println("hello");
  bool result = true;
  uint8_t buf_len = 4;
  cpid(&id);
  Serial.print("NewCard ");
  PrintHex(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
      playMP3();
    }
    else {
      break;
    }
  }
}


void playMP3() {
  //Added
  //////////////////////////////////////////////////////////

  
  if (PrintHex == "0x0A 0x97 0xF3 0x16") //change here the UID of the card/cards that you want to give access
  {
    //Serial.println("hello World");
    Serial.println("0002.mp3");
    //sendMP3Command(0x3, 0, 0002);  // select track 0002.mp3
    sendMP3Command(1, 0, 0); // play
    //sendMP3Command(0x19, 0, 0);     // Loop track playing
    delay(3000);

    //////////////////////////////////////////////////////////
  }
}

//==========

void fadeOutMP3() {
  // don't know what should go here
  Serial.println("fadeoutMP3");
  delay(500); //change value if you want to read cards faster
  sendMP3Command(0x06, 0, 28); // Reduce vol by 2 and fade out
  delay(30);
  sendMP3Command(0x06, 0, 26);
  delay(30);
  sendMP3Command(0x06, 0, 24);
  delay(30);
  sendMP3Command(0x06, 0, 22);
  delay(30);
  sendMP3Command(0x06, 0, 20);
  delay(30);
  sendMP3Command(0x06, 0, 18);
  delay(30);
  sendMP3Command(0x06, 0, 16);
  delay(30);
  sendMP3Command(0x06, 0, 14);
  delay(30);
  sendMP3Command(0x06, 0, 12);
  delay(30);
  sendMP3Command(0x06, 0, 10);
  delay(30);
  sendMP3Command(0x06, 0, 8);
  delay(30);
  sendMP3Command(0x06, 0, 6);
  delay(30);
  sendMP3Command(0x06, 0, 4);
  delay(30);
  sendMP3Command(0x06, 0, 2);
  delay(30);
  sendMP3Command(0x06, 0, 0);
  sendMP3Command(0x16, 0, 0); // Stop
  delay(500);                 // Change value if you want to read cards faster
}


// -------------------------------------------------------------------------------------
// MP3 COMMAND AND DATA     MP3 COMMAND AND DATA     MP3 COMMAND AND DATA     MP3 COMMAN
// -------------------------------------------------------------------------------------

void sendMP3Command(byte Command, byte Param1, byte Param2) {

  // Calculate the checksum
  unsigned int checkSum = -(versionByte + dataLength + Command + infoReq + Param1 + Param2);

  // Construct the command line
  byte commandBuffer[10] = { startByte, versionByte, dataLength, Command, infoReq, Param1, Param2, highByte(checkSum),
                             lowByte(checkSum), endByte
                           };

  for (int cnt = 0; cnt < 10; cnt++) {
    mp3.write(commandBuffer[cnt]);
  }

  // Delay needed between successive commands
  delay(30);
}