Ok pour tout arrêter c'est assez simple voilà le code modifié
void playLastRecordings(uint8_t n) { wait(500); // On attend un peu histoire de laisser le temps à l'utilisateur de mettre le combiné à l'oreille File dir = SD.open("/"); // Recording files are saved in the root directory uint16_t idx = 100; // Id qu'on va tester ... Je préfère commencer à 100, je pense pas qu'on va aller jusqu'à 99999 si ? à changer si tu veux mettre plus de 100 messages mais ça va augmenter le délais d'attente Serial.println("La boucle for commence"); bool onstop = false; for (uint8_t i = 0; i < n; i++ ) { // on va jouer n morceaux snprintf(filename, 11, " %05d.wav", idx); // Format the counter as a five-digit number with leading zeroes, followed by file extension Serial.print("boucle "); // ligne à effacer du code final, uniquement utile pour le debug Serial.println(i); // ligne à effacer du code final, uniquement utile pour le debug Serial.print("Idx = "); // ligne à effacer du code final, uniquement utile pour le debug Serial.println(idx); // ligne à effacer du code final, uniquement utile pour le debug while (!SD.exists(filename)) { // Tant que le fichier existe pas on décrémente l'ID if (idx == 0) // Si ID est à 0 on ne peut pas décrémenter plus ... break; // => Donc on break pour sortir du while idx --; // Sinon on décrémente id ( jusqu'à trouver un fichier ou que id = 0 ) snprintf(filename, 11, " %05d.wav", idx);// on met à jour filename avec la nouveur valeurs d'id } if ( idx == 0 ) { // cas particulier ou id = 0 et on a break le while alors que le fichier existe pas if (!SD.exists(filename)) // on vérifie si le fichier existe break; // Si il existe pas on break le for ( fin des fichiers ) } // code copié de la fonction "play last " Serial.println(filename); // Display the the file name we found // ligne à effacer du code final, uniquement utile pour le debug playWav1.play(filename); // Play the file mode = Mode::Playing; print_mode(); while (!playWav1.isStopped()) { // this works for playWav buttonPlay.update(); buttonRecord.update(); // Button is pressed again if(buttonPlay.risingEdge()) { Serial.println(" Boutton play rising"); // ligne à effacer du code final, uniquement utile pour le debug } if( buttonRecord.fallingEdge()) { Serial.println(" Boutton record falling"); // ligne à effacer du code final, uniquement utile pour le debug } if (buttonPlay.fallingEdge()) { onstop = true; Serial.println(" Boutton play falling"); // ligne à effacer du code final, uniquement utile pour le debug } if( buttonRecord.risingEdge()) { onstop = true; Serial.println(" Boutton record rising"); // ligne à effacer du code final, uniquement utile pour le debug } if(onstop) { Serial.println(" on stop "); // ligne à effacer du code final, uniquement utile pour le debug playWav1.stop(); mode = Mode::Ready; print_mode(); } } // file has been played Serial.println("Fin du son"); // ligne à effacer du code final, uniquement utile pour le debug mode = Mode::Ready; print_mode(); end_Beep(); Serial.println(" bip"); // ligne à effacer du code final, uniquement utile pour le debug // code copié de play all // Play a short beep before each message waveform1.amplitude(beep_volume); wait(750); waveform1.amplitude(0); Serial.println("fin du bip"); // ligne à effacer du code final, uniquement utile pour le debug if (idx == 0 || onstop) // Si 0 ou demande de stop alors il y a plus de son à jouer c'est fini on break le for break; idx --; // sinon décrémenter pour jouer le fichier précédent grâce au for Serial.print("idx ="); // ligne à effacer du code final, uniquement utile pour le debug Serial.println(idx); // ligne à effacer du code final, uniquement utile pour le debug } // All files have been played Serial.println("Fin de la boucle for"); // ligne à effacer du code final, uniquement utile pour le debug mode = Mode::Ready; print_mode(); }
C'est génial ça marche, un grand merci pour ton aide et pour tes annotations qui me permettent de comprendre un peu comment ça marche. J'ai passé une deuxième commande hier, je vais pouvoir garder celui là et m'exercer sur un nouveau, j'aimerai par exemple remplacer le bouton lecture par le chiffre 9 ou 0 du cadran et faire plein d'autre essais.
Encore merci c'est top !

Mon contenu
Non spécifié

