Un solo pulsante per gestire audio mp3 e servo

Buongiorno a tutti, pubblico qui, come suggeritomi, questo post che già avevo pubblicato sotto “gestione eventi”.
Mi sto avvicinando ora al mondo Arduino per la realizzazione di alcuni, semplici, progetti modellistici.
Avendo la necessità di riprodurre casualmente dei file .mp3, ho scritto uno sketch il quale per ogni pressione su un tasto, ne riproduce uno, a caso da un gruppo di 16. Funziona.
L’appetito vien mangiando e quindi ho pensato che abbinare un movimento casuale di un servo alla riproduzione degli mp3 potesse rendere più “vivo” il progetto. Quindi usando lo stesso sketch con le opportune modifiche, riesco a far fare rotazioni di 16 angoli diversi, a caso, al braccio del servo. Quello che non riesco a fare sono le due cose insieme; ossia riprodurre un mp3 a caso e far eseguire un movimento casuale al servo. Viene sempre e solo riprodotto un file mp3. Di seguito lo sketch dove sono attivi i comandi per gli mp3 e disattivati quelli per i movimenti del servo:

#include <Servo.h>
#include <SdFat.h>
#include <MP3Player.h>
Servo myservo;               // creo l'oggetto myservo

int grado = 85;                // variabile per la posizione iniziale del servo
int pinServo = 9;              // variabile per il pin di collegamento del servo
int RS;                           // variabile random per servo
int RA;                           // variabile random per mp3
int tasto = 6;                  // variabile per il pin di collegamento del tasto

void setup() {
 pinMode (tasto, INPUT_PULLUP);  
 randomSeed(analogRead(A0));       //generazione di un valore random in base allo stato di A0 non in uso

 RS = random(1, 17);                    // valori random da 1 a 16
 RA = random(1, 17);                    // valori random da 1 a 16
 
 mp3.Init(3, 2);                            // inizializzazione scheda mp3 (MP3Shield della Cytron)
 myservo.attach( pinServo );          // servo collegato al pin della variabile pinServo (9)
 myservo.write( grado );                // posizione iniziale del servo in base alla variabile grado (85)

}

void loop()
{

 RS = random(1, 17);
 RA = random(1, 17);
 int val = digitalRead (tasto);        // variabile che registra lo stato del tasto
 
 if (val == LOW && RA == 1)  { mp3.PlayTrack("1.mp3");     delay(1000);  }
//if (val == LOW && RS == 1){myservo.write(0) ;delay(500);}
 if (val == LOW && RA == 2)  { mp3.PlayTrack("2.mp3");     delay(1000);  }
//if (val == LOW && RS == 2){myservo.write(85) ;delay(500);}
 if (val == LOW && RA == 3)  { mp3.PlayTrack("3.mp3");     delay(1000);  }
//if (val == LOW && RS == 3){myservo.write(170) ;delay(500);}
 if (val == LOW && RA == 4)  { mp3.PlayTrack("4.mp3");     delay(1000);  }
//if (val == LOW && RS == 4){myservo.write(0) ;delay(500);}
 if (val == LOW && RA == 5)  { mp3.PlayTrack("5.mp3");    delay(1000);  }
//if (val == LOW && RS == 5){myservo.write(85) ;delay(500);}
 if (val == LOW && RA == 6)  { mp3.PlayTrack("6.mp3");    delay(1000);  }
//if (val == LOW && RS == 6){myservo.write(170) ;delay(500);}
 if (val == LOW && RA == 7)  { mp3.PlayTrack("7.mp3");    delay(1000);  }
//if (val == LOW && RS == 7){myservo.write(0) ;delay(500);}
 if (val == LOW && RA == 8)  { mp3.PlayTrack("8.mp3");    delay(1000);  }
//if (val == LOW && RS == 8){myservo.write(85) ;delay(500);}
 if (val == LOW && RA == 9)  { mp3.PlayTrack("9.mp3");    delay(1000);  }
//if (val == LOW && RS == 9){myservo.write(170) ;delay(500);}
 if (val == LOW && RA == 10)  { mp3.PlayTrack("10.mp3");    delay(1000);  }
//if (val == LOW && RS == 10){myservo.write(0) ;delay(500);}
 if (val == LOW && RA == 11)  { mp3.PlayTrack("11.mp3");    delay(1000);  }
//if (val == LOW && RS == 11){myservo.write(85) ;delay(500);}
 if (val == LOW && RA == 12)  { mp3.PlayTrack("12.mp3");    delay(1000);  }
//if (val == LOW && RS == 12){myservo.write(170) ;delay(500);}
 if (val == LOW && RA == 13)  { mp3.PlayTrack("13.mp3");    delay(1000);  }
//if (val == LOW && RS == 13){myservo.write(0) ;delay(500);}
 if (val == LOW && RA == 14)  { mp3.PlayTrack("14.mp3");    delay(1000);  }
//if (val == LOW && RS == 14){myservo.write(85) ;delay(500);}
 if (val == LOW && RA == 15)  { mp3.PlayTrack("15.mp3");     delay(1000);  }
//if (val == LOW && RS == 15){myservo.write(170) ;delay(500);}
 if (val == LOW && RA == 16)  { mp3.PlayTrack("16.mp3");     delay(1000);  }
//if (val == LOW && RS == 16){myservo.write(0) ;delay(500);}
//myservo.write( 85) ;
}

Ciò che ho provato, ma non funziona, nel senso che viene solo riprodotto il file, è stata la seguente stringa:

if (val == LOW && RA == 1){ mp3.PlayTrack("X.mp3");delay(500);myservo.write(Y);delay(1000);}

dove X è il nome del file e Y l’angolo del braccio del servo diversi per ogni stringa. Le schede che sto usando sono:
Arduino Uno rev. 3
MP3Shield della Cytron Technologies

Qualche dritta?

andando sulla Libreria , leggo:

Limitations:

  • Tolerate etc etc.
  • TimerOne interrupt cannot be used for other purposes while playing MP3 files.

Ora, visto che Guglielmo ha da poco postato Questa cosa , dove si dice appunto che il Timer1 è usato dalla libreria servo, etc etc etc

Grazie Brunello per la risposta; mi pare di capire, quindi, che c'è incompatibilità. Essendo un "total beginner" adotterò una soluzione a due schede anche se non molto "elegante".