[RESOLU] Utilisation du module Grove - MP3 v2.0 ?

Merci beaucoup de la réponse et du coup maintenant ça fonctionne mais ça s’arrête au bout de 2 ou 3 secondes…

#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>

// Note: You must define a SoftwareSerial class object that the name must be mp3,
// but you can change the pin number according to the actual situation.
SoftwareSerial mp3(6, 7);

void setup()
{
mp3.begin(9600);
Serial.begin(9600);
delay(100);

SelectPlayerDevice(0x02); // Select SD card as the player device.
SetVolume(0x1E); // Set the volume, the range is 0x00 to 0x1E.

if(Serial.available()){
PlayLoop();
}
}

void loop(){
}

J'ai testé ca sinon et ça ne marche pluss :/

void setup() { mp3.begin(9600); delay(100);

SelectPlayerDevice(0x02); // Select SD card as the player device. SetVolume(0x1E); // Set the volume, the range is 0x00 to 0x1E.

if(mp3.available()){ PlayLoop(); } }

void loop(){}

Je n'ai pas le module mais ne faut-il pas d'abord choisir un numéro de playlist? Genre avec un SpecifyMusicPlay(1);

Appeler mp3.available() n'est sans doute pas une bonne idée ...

Je sais pas je n'y arrive vraiment pas je crois que ce module ne s'active qu'en communiquant avec le moniteur.

J'ai essayé plusieurs bidouillages mais ils sont infructueux...

Quel arduino avez vous, comment tout est connecté, alimenté etc?

c'est bon c'est regléééééééé, enfait ce module est un peu bizarre. Enfait j'avais mis des if en trop dans le code, en tout cas merci de votre réactivité !!

Bonjour à Tous,
Je déterre ce topic après plus de 6 mois, et surtout après plusieurs jours de “pateaugeage”…

Après avoir reçu mon Grove MP3 v2.0, j’ai tout d’abord modifié la librairie pour me passer du softwareSerial comme lumineusement expliqué ici (j’utilise un Mega).
Voici ce que ça donne :

#ifndef __MP3PLAYER_KT403A_H__
#define __MP3PLAYER_KT403A_H__


//#include <SoftwareSerial.h>

//extern SoftwareSerial mp3;

extern HardwareSerial mp3;

void SelectPlayerDevice(uint8_t device);
void SpecifyMusicPlay(uint16_t index);
void SpecifyfolderPlay(uint8_t folder, uint8_t index);
void PlayPause(void);
void PlayResume(void);
void PlayNext(void);
void PlayPrevious(void);
void PlayLoop(void);
void SetVolume(uint8_t volume);
void IncreaseVolume(void);
void DecreaseVolume(void);
uint8_t QueryPlayStatus(void);
void printReturnedData(void);


#endif

Je l’ai éditée en utilisant Wordpad, pour garder une mise en page lisible.

J’ai ensuite formaté une MicroSD 4Go en FAT32 et rangé dessus une petite dizaine de fichiers mp3. Ces fichiers sont parfaitement lisibles sur Windows.

j’ai dans un premier temps testé sans succès le sketch de ce topic. Pour plus de visibilité (l’empilage de dialogues en liaison série me perturbant, vu mon grand âge), j’ai écrit un sketch basé sur un switch / case scrutant le signal ana d’un potentiomètre.

Je passe de case en case après dépassement en + puis en - de 2 valeurs “distantes” pour éviter les aléas (comme >800/1023 et 400/1023).
2 cases en sens + envoient chacun à leur tour une ligne de commande de la librairie modifiée.
je surveille aussi avec le moniteur série l’état du graphe (switch).
je vois nettement la LED de TX clignoter à chaque case en +.
j’ai bien entendu sélectionné la lecture sur SD ainsi que le volume moyen en setup.
Voici le sketch :

#include <MP3Player_KT403A.h>
HardwareSerial mp3 = Serial3; // la librairie attend une variable mp3.
    int lecteur = 0;
    int potar = 0;

void setup()
{   mp3.begin(9600);
    Serial.begin(9600); 
    delay(100);
    
    SelectPlayerDevice(0x02);       // Select SD card as the player device.
    SetVolume(0x0E);                // Set the volume, the range is 0x00 to 0x1E.
}

void loop()
{
   potar = analogRead(A0);

   switch (lecteur)  {

    case 0 :
    if (potar > 700)
    {Serial.println("Play 1");
    SpecifyMusicPlay(1); 
    delay(500);
    printReturnedData();
    lecteur = 1;  }
    break;

    case 1 :
    if (potar < 400)
    {//Serial.println("2");
    lecteur = 2;}
    break;

    case 2 :
    if (potar > 700)
    {Serial.println("Play 2");
    SpecifyMusicPlay(2);
    delay(500);
    printReturnedData();
    lecteur = 3;  }
    break;

    case 3 :
    if (potar < 400)
    { lecteur = 0; }
    break;    
   }
   

}

Problème : aucune réaction du Grove, malgré la LED verte allumée (carte SD ready) avec un casque stéréo branché dessus. Côté audio tout est OK car j’entends un petit “tic” à la mise sous tension du Grove.

Ne pouvant lire le flux entrant dans le Grove, j’ai connecté sur le premier Mega un second Mega en lieu et place du Grove, et écrit un sketch d’écoute et d’affichage sur le moniteur du flux reçu

Tout d’abord en string complète avec détection de nouvelle ligne, puis caractère par caractère.

C’est le calme plat … en string : le blanc éblouissant, et caractères : une cascade de “-1”, caractère Ascii nul.

Force est de constater que les commandes élaborées par la bibliothèque ne passent pas.

Aurais-je raté quelque chose ???
Merci d’avance pour votre aide !!!

→ vérifiez la doc de configuration

Support FAT16 and FAT32 file system
SD Card: micro SD Card(≤2GB)

vous avez bon sur sur le format de la carte SD mais la votre est trop grosse, il faut une 2GB max


Une fois résolu ce soucis, avant d’aller plus avant, essayez leur programme d’exemple (modifié un peu ci dessous) et bien sûr avec votre librairie modifiée, en réglant votre console série à 115200 bauds et en n’envoyant ni \r ni \n (pas d fin de ligne) essayez le code suivant, tapez 1 et validez par exemple pour appeler SpecifyMusicPlay(1) et vous devriez entendre de la musique… sinon c’est qu’il y a un truc qui cloche

#include <MP3Player_KT403A.h>

HardwareSerial mp3 = Serial3;

void setup()
{
  Serial.begin(115200);

  mp3.begin(9600);
  delay(100);

  SelectPlayerDevice(0x02);       // Select SD card as the player device.
  SetVolume(0x0E);                // Set the volume, the range is 0x00 to 0x1E.
}

void loop()
{
  char recvChar = 0;
  if (Serial.available()) {
    recvChar = Serial.read();

    Serial.print("received: "); Serial.println( recvChar );

    switch (recvChar) {
      case '1':
        SpecifyMusicPlay(1);
        Serial.println("music index to play: 1");
        break;
      case '2':
        PlayPause();
        Serial.println("Pause the MP3 player");
        break;
      case '3':
        PlayResume();
        Serial.println("Resume the MP3 player");
        break;
      case '4':
        PlayNext();
        Serial.println("Play the next song");
        break;
      case '5':
        PlayPrevious();
        Serial.println("Play the previous song");
        break;
      case '6':
        PlayLoop();
        Serial.println("Play loop for all the songs");
        break;
      case '7':
        IncreaseVolume();
        Serial.println("Increase volume");
        break;
      case '8':
        DecreaseVolume();
        Serial.println("Decrease volume");
        break;
    }
  }
}

Merci pour votre réponse rapide, ça aide vu le peu de forums traitant du sujet...

La raison du choix de la taille de ma carte SD était la suivante : Module acheté sur Amazon et de version différente de celle décrite dans la page de votre lien.

voici ses spécifications :

Specification:

Input: 5V(DC) Operating current (without signal output state): less than 15 mA Operating current (with signal output state): less than 40 mA Chip: KT403A Chip LDO output voltage: 3.3 V Chip output current: 100 mA(at Max.) File formats supported: MP3, WAV, WMA Maximum memory supported for SD card: 32 GB Sampled rate : 8/11.025/12/16/22.05/24/32/44.1/48 (KHz)

Je vais tout de même acheter une carte de 2Go pour lever le doute et reviendrai confirmer ici.

Autre point (question) :

en réglant votre console série à 115200 bauds et en n'envoyant ni \r ni \n (pas d fin de ligne)

en quoi le choix de vitesse de transmission de la console série interviendrait sur le fonctionnement du sketch ?

parce-que dans le sketch j'ai mis Serial.begin(115200); donc les commandes que vous envoyez depuis la console série doivent correspondre à ce débit, idem pour l'affichage de Serial.print()

Ok pour la SD si leur doc le dit ça doit être vrai :)

parce-que dans le sketch j’ai mis Serial.begin(115200);

:slight_smile: :slight_smile: :slight_smile: Si ce n’est que ça, ça me rassure, mais j’aurais pu aussi modifier votre sketch :slight_smile: :slight_smile: :slight_smile:
Bref, j’ai conservé le 115200 … et adapté a console.

Par acquis de conscience, et avant de recevoir ma nouvelle SD2Gb, j’ai réussi à réduire la taille de la 4Gb avec Acornis Disk Director.

Comme pressenti, pas d’amélioration, mais un phénomène qui m’avait échappé précédemment :
après avoir répété 6 fois le choix 1 (comme avant, les 6 séquences de potar), je remarque curieusement un freeze du sketch au 7ème essai, comme le montre le screen suivant :

received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1

et là ça bloque …

j’ai testé les ports 1 et 2 aussi, sans changement…

Un reset autorise de nouveau 6 envois d’ordres, mais toujours pas de son …

je n’ai jamais encore jamais connu ce phénomène…

Par second acquis de conscience, j'ai refait la manip avec un autre Mega 2560 : même résultat. Je sens que mon Grove MP3 a un sérieux blème ... Qu'en pensez-vous ?

Possible mais pas sûr - si vous trouvez une carte 2GB testez avec ça. Éventuellement utilisez la librairie SDfat pour formatter la carte si vous avez un shield SD qui traîne

Après avoir enfin reçu ma carte µSD 2Gb, formatée avec SDFat, et chargée avec qq fichiers MP3, le problème reste le même... Ce blocage après 6 envois de commande me rend perplexe... j'ai testé une alternance de choix 1 et 2, donc lecture 1, puis pause , etc... 6 fois de suite. Le blocage se produit de la même façon que dans mes posts précédents et toujours aucun son...

Ce qui est frustrant, c'est qu'aucune LED ne permet de visualiser le flux série reçu par le module. L'unique LED est sensée clignoter en lecture, s'éteindre en pause ou en absence de carte, et restée allumée dans tous les autres cas... La mienne reste donc allumée...

Une idée avant le retour au fournisseur ?