Salut à tous.
J'ai pour projet de créer un lecteur MP3 piloté avec une télécommande IR (infrarouge).
Mais je rencontre quelques problèmes de mise en oeuvre.
J'ai donc besoin de votre aide.
Matériels utilisés :
Librairies Arduino utilisées :
- IDE Arduino 1.0.5 pour Linux 64bit
- SFEMP3Shield de Michael P. Flaga
- IRremote de Ken Shirriff
J'ai tout d'abord testé le shield MP3 grâce à l'exemple FilePlayer fourni avec la librairie SFEMP3Shield.
Tout marche nickel.
J'ai ensuite fait un sketch pour récupérer les signaux de la télécommande (Pièce-jointe : Telecommande_receiver.ino).
Lui aussi marche nickel.
J'ai ainsi pu récupérer le code des touches qui n'intéressaient et faire un nouveau sketch (Pièce-jointe : Skeleton.ino) qui me servira de base pour contrôler le shield MP3.
J'ai alors entrepris de mixer ce sketch avec l'exemple FilePlayer (Pièce-jointe : PlayerMP3.ino).
C'est là que les problèmes sont apparus.
La 1ère fois que j'utilise la télécommande, ça marche.
Tant que la chanson n'est pas terminée, le code de la touche appuyée récupéré est erroné.
Lorsque la chanson est finie, le récepteur IR renvoi le bon code.
Et ainsi de suite.
Après avoir fait des recherches sur le net, j'en ai déduit qu'il s'agissait de conflits entre les interruptions externes utilisées par les 2 librairies SFEMP3Shield et IRremote.
L'arduino UNO peut gérer 2 interruptions externes.
J'ai alors d'abord essayé de modifier les librairies pour qu'ils utilisent une interruption différente.
Test 1 :
J'ai essayé de changer IrremoteInt.h ligne 66 à 67 :
//#define IR_USE_TIMER1 // tx = pin 9
#define IR_USE_TIMER2 // tx = pin 3
par
#define IR_USE_TIMER1 // tx = pin 9
//#define IR_USE_TIMER2 // tx = pin 3
Cela n'a rien changé : toujours un code erroné tant qu'une chanson est jouée.
Test 2 :
J'ai remis le fichier IrremoteInt.h original et j'ai essayé de modifier SFEMP3ShieldConfig.h ligne 187 :
#define MP3_DREQINT 0
par
#define MP3_DREQINT 1
Dans ce cas, la télécommande marche mais aucune chanson ne se lance pas.
J'ai alors testé différentes choses sur la librairie SFEMP3Shield :
Test 3 :
J'ai remis le fichier SFEMP3ShieldConfig.h original et je l'ai re-modifié en changeant la ligne 220 :
#define USE_MP3_REFILL_MEANS USE_MP3_INTx
par
#define USE_MP3_REFILL_MEANS USE_MP3_Polled
Et j'ai aussi ajouté la ligne suivante au tout début de mon loop () :
MP3player.available ();
Dans ce cas, ça marche plutôt bien : la télécommande est utilisable même lorsqu'une chanson est en cours de lecture.
Par contre, certaines fonctions de librairie SFEMP3Shield ne marchent plus comme :
- pauseMusic
- resumeMusic
Et lorsque j'utilise end () là plus rien ne marche.
Idem lorsque je teste avec l'exemple FilePlayer
Test 4 :
Je suis reparti des fichiers originaux et j'ai re-modifié le fichier SFEMP3ShieldConfig.h en changeant la ligne 220 :
#define USE_MP3_REFILL_MEANS USE_MP3_INTx
par
#define USE_MP3_REFILL_MEANS USE_MP3_Timer1
J'ai alors installé la librairie TimerOne et l'ai inclus dans mon code.
J'ai aussi remis la ligne suivante au tout début de mon loop () :
MP3player.available ();
Là je reviens au problème de base : la télécommande n'est plus utilisable tant qu'une chanson est en cours de lecture.
Test 5 :
Je suis reparti des fichiers originaux et j'ai re-modifié le fichier SFEMP3ShieldConfig.h en changeant la ligne 220 :
#define USE_MP3_REFILL_MEANS USE_MP3_INTx
par
#define USE_MP3_REFILL_MEANS USE_MP3_SimpleTimer
J'ai alors installé la librairie SimpleTimer et l'ai inclus dans mon code.
Là je reviens au test 2 : la télécommande marche mais aucune chanson ne se lance pas.
Je ne sais plus quoi tester !
J'ai besoin d'un coup de pouce.
Merci d'avance pour votre aide.
Telecommande_receiver.ino (295 Bytes)
Skeleton.ino (1.76 KB)
PlayerMP3.ino (4.52 KB)