VS1053b et arduino mega2560

Bonjour,

J’ai acheté cette carte et j’essaye désespérément de la faire fonctionner.

Mon but est simplement de lire un fichier mp3 quand j’appuie sur un bouton d’une manette xbox.

J’ai donc adapté un code avec les librairies #include <vs1053_SdFat.h> .

Quand je lance le programme j’arrive bien à entendre un premier fichier mp3, mais très aléatoirement cela coupe soit en plein milieu du fichier soit juste à la fin de la lecture et cela plante tout le programme.

Il faut donc faire un reset complet.

Avez vous une idée ?

Merci

Attends je sors la boule de crystal :

Non, je ne vois pas. Mais à vrai dire avec un schéma et le code elle est beaucoup plus performante :smiling_imp:

Un conseil : Code entre balises.

Le code était un peu trop grand je joins donc mon fichier …

Pour le schéma j’ai une carte arduino mega branché sur ma carte vs1053 comme ça :

2 => DREQ
4 => CS
6 => XCS
7 => XDCS
8 => XRESET
MOSI => 51
MISO => 50
SCLK => 52

J’ai une carte amplificateur branché sur le jack qui est sur ma carte vs1053

J’ai une carte SD 8Go formatée en FAT32

La carte VS1053 est alimenté par l’arduino qui est alimenté en 5V (PC)
La carte ampli alimenté en 9v batterie indépendante

padawan360_body_mega_i2c.ino (25.1 KB)

Procède par élimination. Essaie tout d'abord un exemple de cette librairie :

Je vais tester ce petit exemple simple, mais quelle est la différence entre breakout et shield que doit je mettre comme pin par rapport à mon branchement actuel ?

// define the pins used
//#define CLK 13       // SPI Clock, shared with SD card
//#define MISO 12      // Input data, from VS1053/SD card
//#define MOSI 11      // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins. 
// See http://arduino.cc/en/Reference/SPI "Connections"

// These are the pins used for the breakout example
#define BREAKOUT_RESET  9      // VS1053 reset pin (output)
#define BREAKOUT_CS     10     // VS1053 chip select pin (output)
#define BREAKOUT_DCS    8      // VS1053 Data/command select pin (output)
// These are the pins used for the music maker shield
#define SHIELD_RESET  -1      // VS1053 reset pin (unused!)
#define SHIELD_CS     7      // VS1053 chip select pin (output)
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield
#define CARDCS 4     // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3       // VS1053 Data request, ideally an Interrupt pin

Un shield :

Un breakout :

Le shield impose le choix des broches, pas la carte.

Bon je viens de tester l'exemple player_simple et cela fonctionne correctement mais cel ne lit que les 2 premiers fichiers. Pas de blocage!

Le logiciel padawan360_body_mega_i2c.ino envoie des traces sur la console à 115200 baud.
Il faut essayer de voir si lors du blocage il se passe quelque chose de particulier.
Tu peux également ajouter des Serial.prinln() pour cerner le problème.

Bon le mode debugg ne donne rien de significatif, j'ai par contre essayé de reprende cette librairie dans mon code et au lieu de

MP3player.playTrack(1);

j'ai maintenant

musicPlayer.playFullFile("/track001.mp3");

ça à l'air de mieux fonctionner

mais pour le tester jusqu'au bout, comment je peux transformer un musicPlayer.playFullFile("/track001.mp3"); en musicPlayer.xxxx(1);

Tous ça pour pouvoir faire un random si besoin comme MP3player.playTrack(random(1;10));

Vous aurez compris je ne suis pas un pro du langage :wink:

Merci

Il suffit de construire le nom de fichier.
Essaie ceci :

char fileName[20];

sprintf(fileName, "/track%03d.mp3", random(1;10));
musicPlayer.playFullFile(fileName);

Parfait tout marche à merveille

Merci pour votre aide