Code simple pour module MP3 Grove 2.0

Bonjour à tous,

J'ai débuté il y a peu dans le monde complexe de l'Arduino, afin de créer une séquence pour une "machine à remonter le temps ".

Dans ma séquence, je souhaite piloter la mise en route d'une bande son. J'avais prévu au début de passer par un relais qui pilote la mise en route d'une interface contenant le son. J'avais donc prévu dans ma séquence un simple (digitalWrite, HIGH) qui fermait le relais correspondant.

En cherchant quelle interface utiliser après la lecture mp3, j'ai découvert l'existence du module MP3 Grove 2.0.

Le problème est que tous les codes que je trouve pour piloter ce module sont à rallonge.

Je n'ai pas besoin de retour d'informations, pas de lecture en boucle, equalizer, etc etc....
Je souhaiterais simplement avoir un code qui initialise le module et les constantes, affecte le PIN relié au TX du module et ensuite la commande à utiliser pour lire une fois la piste 1 ( voir aussi la 2 ) sur la sd, avec un volume fixe, puis reset du module.

En espérant que vous pourrez m'aider sur ce code. Pour info le montage se fera sur un Arduino Mega.

Merciiiiiiii d'avance !

Vous pourriez faire

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

SoftwareSerial mp3(2, 3); // ICI CHOISIR LES BONNES PIN (mais c'est idiot sur un MEGA !!)

void setup()
{
  mp3.begin(9600);
  SelectPlayerDevice(0x02);       // choisir la carte SD.
  SetVolume(0x0E);                // définir le volume (entre 0x00 et 0x1E)
  SpecifyMusicPlay(1);            // lancer la chanson à l'index 1 (index entre 0-65535 - dans l'ordre d'ajout sur la carte SD sans doute)
  // while (QueryPlayStatus() != 0); // uniquement si on veut que le programme attende activement la fin de la chanson
}

void loop() {}

mais comme vous êtes sur un mega c’est vraiment stupide d’utiliser software Serial pour parler au module alors que vous pouvez utiliser un port série matériel

donc il faut modifier la librairie pour virer la dépendance à un Software Serial et remplacer ces lignes juste par

 extern HardwareSerial mp3;

et dans votre code faire pointer la variable mp3 vers le bon port Série matériel

#include <MP3Player_KT403A.h>

HardwareSerial mp3 = Serial2; // choisir le port série matériel voulu

void setup()
{
  mp3.begin(9600);
  SelectPlayerDevice(0x02);       // choisir la carte SD.
  SetVolume(0x0E);                // définir le volume (entre 0x00 et 0x1E)
  SpecifyMusicPlay(1);            // lancer la chanson à l'index 1 (index entre 0-65535 - dans l'ordre d'ajout sur la carte SD sans doute)
  // while (QueryPlayStatus() != 0); // uniquement si on veut que le programme attende activement la fin de la chanson
}

void loop() {}

j’ai pas testé mais ça devrait marcher

Et ben ça me semble parfait!!
Merci beaucoup pour les deux options car je risque d'utiliser le uno pour des plus petites séquences.
Je ne savais pas que le mega comportait des ports matériel, je l'ai pris car j'ai beaucoup d'autres choses à connecter.
Je vais tester tout ça!!!

Ps: la commande specifyMusicPlay(1) peut être mise dans le loop aussi?? ( dans une séquence conditionnée qui ne se répète pas une fois effectuée)

J’ai dû louper une étape…
Voici mon code :

#ifndef __MP3PLAYER_KT403A_H__
#define __MP3PLAYER_KT403A_H__

#include <HardwareSerial.h>

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

#include <MP3Player_KT403A.h>

HardwareSerial mp3 = Serial2; // choisir le port série matériel voulu

void setup()
{
  mp3.begin(9600);
  SelectPlayerDevice(0x02);       // choisir la carte SD.
  SetVolume(0x0E);                // définir le volume (entre 0x00 et 0x1E)
  
}

void loop()
{

SpecifyMusicPlay(1);            // lancer la chanson à l'index 1 (index entre 0-65535 - dans l'ordre d'ajout sur la carte SD sans doute)
  // while (QueryPlayStatus() != 0); // uniquement si on veut que le programme attende activement la fin de la chanson

}

Et voici la vérification :

F:\Documents\PERSO\PROJET ESCAPE\Sequence Combi\programme_module_mp3\programme_module_mp3.ino:28:30: fatal error: MP3Player_KT403A.h: No such file or directory

 #include <MP3Player_KT403A.h>

                              ^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino Mega ADK

Est-ce que j’ai manqué une étape, il faut que j’ajoute quelque chose concernant le matériel ?

C'est bon !! Je me suis aidé d'un autre post pour comprendre qu'il fallait inclure la librairie spécifique dans ma bibliothèque et que c'est cela qu'il fallait modifier ensuite !

Il ne me reste qu'à tester, mais la vérification est OK.

Merci beaucoup !!

Oui c’est ça télécharger la bibliothèque de fonctions et la modifier - juste faire ensuite le #include

Bonsoir à tous,

J’ai reçu ce jour mon module Grove Mp3 v2.0.
J’ai branché à priori comme il faut ( GND, 5V, RX avec TX et TX avec RX port 18 et 19 de la Mega ), j’ai bien la led verte allumée quand je mets ma SD dans le module, le televersement ok mais rien ne se passe, pas de son dans les écouteurs…
Je sèche un peu sur la solution, même en parcourant les différents forums…
Voici mon code :

#include <MP3Player_KT403A.h> //  on inclut la librairie adaptée 

HardwareSerial mp3 = Serial1; // brancher le module mp3 aux ports 19 et 18 (tx avec rx et rx avec tx) 

void setup()
{ 
  mp3.begin(9600);   // le module grove est configuré pour discuter à 9600 bauds, donc c'est la vitesse que l'on choisit
  Serial.begin(9600);
  delay(100); // petit délai pour s'assurer que tout s'initialise bien
  SelectPlayerDevice(0x02);       // choisir la carte SD.
  SetVolume(20);                // définir le volume entre 0 et 30 (ou entre 0x00 et 0x1E)
  
}

void loop() 
{
 SpecifyMusicPlay(1);            // lancer la chanson à l'index 1 (index entre 0-65535 - dans l'ordre d'ajout sur la carte SD sans doute)
  while (QueryPlayStatus() != 0); // uniquement si on veut que le programme attende activement la fin de la chanson 
  
  
  }

Merci de votre aide ^^

Bon si je transforme la librairie comme à l’origine, et que je passe par deux ports digitaux ca fonctionne…

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

SoftwareSerial mp3(9, 10); // ICI CHOISIR LES BONNES PIN (mais c'est idiot sur un MEGA !!)

void setup()
{ 
  mp3.begin(9600);   // le module grove est configuré pour discuter à 9600 bauds, donc c'est la vitesse que l'on choisit
  Serial.begin(9600);
  delay(100); // petit délai pour s'assurer que tout s'initialise bien
  SelectPlayerDevice(0x02);       // choisir la carte SD.
  SetVolume(20);                // définir le volume entre 0 et 30 (ou entre 0x00 et 0x1E)
  
}

void loop() 
{
  SpecifyMusicPlay(1);            // lancer la chanson à l'index 1 (index entre 0-65535 - dans l'ordre d'ajout sur la carte SD sans doute)
  while (QueryPlayStatus() != 0); // uniquement si on veut que le programme attende activement la fin de la chanson
  
  
  }