You haven't said what's not working. Nor shown any error messages.
However it does work here. The chosen track in the chosen folder plays to its end, and then there's silence. Is that what you intend?
I made only trivial changes* but I'll include my code just in case.
However, I was getting intermittent failures at the compiling and/or uploading stage. The error was something like 'AWT Event Exception'. Because of its inconsistency I'd have bet on it being a loose connection, but I haven't been able to reproduce it now, and research appears to attribute it to coding.
- I've just added one I don't regard as trivial.
if (!player.begin(mySerial, true, false)) // To eliminate speaker initial distortion
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#define RX_PIN 10
#define TX_PIN 11
SoftwareSerial mySerial(RX_PIN, TX_PIN); // RX, TX
DFRobotDFPlayerMini player;
const int folderButtons[4] = {2, 3, 4, 5};
const int trackButtons[6] = {6, 7, 8, 9, 12, A0};
int selectedFolder = 1;
void setup()
{
Serial.begin(115200);
delay(200);
for (int i = 0; i < 4; i++)
{
pinMode(folderButtons[i], INPUT_PULLUP);
}
for (int i = 0; i < 6; i++)
{
pinMode(trackButtons[i], INPUT_PULLUP);
}
mySerial.begin(9600);
if (!player.begin(mySerial, true, false)) // To eliminate speaker initial distortion
{
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while (true);
}
player.setTimeOut(2000);
player.volume(20); // Set volume (0~30).
}
void loop()
{
// Check folder buttons
for (int i = 0; i < 4; i++)
{
if (digitalRead(folderButtons[i]) == LOW)
{
selectFolder(i + 1);
delay(500); // Debounce delay
}
}
// Check track buttons
for (int i = 0; i < 6; i++)
{
if (digitalRead(trackButtons[i]) == LOW)
{
playTrack(i + 1);
delay(500); // Debounce delay
}
}
}
void selectFolder(int folderNumber)
{
selectedFolder = folderNumber;
}
void playTrack(int trackNumber)
{
player.playFolder(selectedFolder, trackNumber);
delay(10);
}