Come già detto, a causa del ciclo for senza fine.
La prima modifica da fare è condizionare (mettere sotto condizione if) l'esecuzione delle istruzioni relative alla musica, usando una variabile booleana di abilitazione, ad esempio bool mp3_OK
if (mp3_OK) {
...istruzioni musica...
}
che viene impostata nel punto in cui si testa il lettore:
if (mp3.begin(ss)) {
mp3_OK = true;
} else {
Serial.print("errore mp3");
mp3_OK = false;
}
In questo modo se il lettore non c'è/non risponde, tutto quello che riguarda la musica non viene più gestito e non genera altri errori.
Ma poi c'è il problema accennato da DATman, che conduce alla faccenda "programmazione a stati".