gérer simultanément deux mini Df-player

Bonjour à tous, après avoir mené à bien mon premier gros projet arcade, grace à vous sur un autre topic, j'aimerais peaufiner la partie son de celui ci, et je bute sur la gestion des modules mp3 df-player.

J'ai un module de brancher sur ma Mega, qui fonctionne bien, et qui lance des sons mp3, à certains moments donnés de la boucle.
J'aimerais rajouter un second df-player, qui jouera une musique de fond, en parralelle du loop d'origine.
Il est cablé sur le RX2 et TX2, mais je ne trouve pas le moyen de jouer un son sur l'un, tout en envoyant un autre son sur l'autre.
Quelqu'un aurait une idée de la procédure ?

Le premier s'intitule ainsi:

DFPlayerSerial.begin( 9600 );
  mp3_set_serial( DFPlayerSerial );
  mp3_set_device( 2 );  // Carte SD

le second:

DFPlayerSerial2.begin( 4800 );
  mp3_set_serial( DFPlayerSerial2 );
  mp3_set_device( 2 );  // Carte SD

la commande qui envoie le son:

void mp3_1(){ mp3_set_volume( 30);mp3_play (1);}

Merci d'avance

Sauf erreur de ma part, j'ai l'impression que tu utilises cette librairie :

Celle-ci est préférable :

D'autre part, la MEGA possède 3 ports de communication hardware. J'espère que tu les utilises, en tous cas au moins un ?

oui, j'utilise les ports différents de la carte mega, mais je ne sais pas comment appeller chaque port individuellement pour envoyer du son sur l'un ou l'autre module mp3 que j'ai branché.

DFPlayerSerial et DFPlayerSerial2 correspondent à quoi ?

c'est pour différencier les 2 modules que j'ai branché, l'un sur Rx et TX et l'autre sur RX2 et TX2 de la carte Mega.
Du coups j'aimerais activer l'un ou l'autre module dans mon loop, mais je ne sais comment faire.

Personnellement j'utilise la librairie DFRobotDFPlayerMini qui permet de créer plusieurs instances.

Je ne connais pas celle que tu utilises.

Pourquoi initialiser un port à 9600 et l'autre à 4800 ?

ok, mais du coups même avec cette librairie, comment activer l'un ou l'autre module ? Voir les deux "df player " en même temps ?

Comme je l'ai dit :

la librairie DFRobotDFPlayerMini permet de créer plusieurs instances.

J'ai la librairie, mais je ne sais pas comment choisir le bon module dans le loop.
Quelles commandes me permettrais de prendre l'un ou l'autre ?

Comprends-tu la notion d'instance ?
Il suffit de créer deux objets :

DFRobotDFPlayerMini myDFPlayer1;
DFRobotDFPlayerMini myDFPlayer2;

Je dirais qu'utiliser Serial pour le premier DFPLAYER et Serial2 pour le deuxième est une erreur.
Pourquoi ne pas utiliser Serial2 + Serial3, ou SoftwareSerial + Serial2 ?

Encore une fois : pourquoi initialiser un port à 9600 et l'autre à 4800 ?

Bonjour serais t'il possible d'avoir un exemple de programme où tu utilises deux df player en même temps

A qui adresses-tu ta question ?

je m'adressais à toi hbachetti merci par avance pour ta réponse

Je n'ai jamais écrit ce genre de code, mais à priori je ne vois pas la difficulté.

Un ARDUINO UNO, NANO ou MINI ne possède qu'une ligne série.
Cela impose d'utiliser Serial pour le premier DFPLAYER et SoftwareSerial pour le deuxième, ce qui oblige à débrancher le premier pour charger le logiciel, et supprime par la même occasion toute possibilité d'affichage sur la console (moniteur série).
Cela reste néanmoins parfaitement réalisable.

A mon sens, il vaut mieux utiliser un ARDUINO MEGA afin de disposer de deux lignes séries.

  • Serial2 + SoftwareSerial
  • Serial2 + Serial3
    On conserve ainsi la ligne Serial1 pour le chargement et l'affichage sur la console.
    Ensuite rien n'empêche, lorsque le logiciel est au point de basculer sur une UNO ou NANO, si la capacité mémoire de ces cartes est suffisante.

En partant de cette librairie : DFRobot/DFRobotDFPlayerMini

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer1;
DFRobotDFPlayerMini myDFPlayer2;

void setup()
{
  Serial.begin(115200);
  Serial2.begin(9600);
  mySoftwareSerial.begin(9600);

  Serial.println();
  Serial.println(F("Initializing DFPlayer ..."));

  if (!myDFPlayer1.begin(mySoftwareSerial)) {
    Serial.println(F("SoftwareSerial: Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
  }
  Serial.println(F("DFPlayer Mini online."));
  if (!myDFPlayer2.begin(Serial2)) {
    Serial.println(F("Serial2: Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer1.volume(10);
  myDFPlayer2.volume(10);
}

void loop()
{
}

Ensuite il suffit d'utiliser les méthodes volume(), play(), etc. sur chaque instance, à ta convenance.

Voir les exemples de la librairie.

merci pour ta réponse j'avais fais cela mais le problème c'est que à aucun moment on dit à l'arduino quel dfplayer correspond au 1 et au 2 comment il fait la différence?

ps: j'utilise un arduino nano

merci pour ta réponse j'avais fais cela mais le problème c'est que à aucun moment on dit à l'arduino quel dfplayer correspond au 1 et au 2 comment il fait la différence?

ps: j'utilise un arduino nano

Il y a deux instances : myDFPlayer1 et myDFPlayer2.
Utilise l'une ou l'autre.

désolé de répondre que maintenant j'ai abandonné cette idée finalement je n'arrivais à rien aucun dfplayer ne répondais avec la solution que tu m'as donnée pour palier le problème j'utilise deux Arduino