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 !!!