Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


projets:lecteurs_audio_dfplayer:accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
projets:lecteurs_audio_dfplayer:accueil [2019/06/07 16:27]
laurent [Hardware]
projets:lecteurs_audio_dfplayer:accueil [2019/07/10 10:34] (Version actuelle)
laurent [Code]
Ligne 1: Ligne 1:
 ====== Lecteurs audio DFplayer ====== ====== Lecteurs audio DFplayer ======
   * Porteur du projet : Réso-nance [[:user:laurent|laurent]]   * Porteur du projet : Réso-nance [[:user:laurent|laurent]]
-  * Date : 07/06/2019/ - ...+  * Date : 07/06/2019/
   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]
   * Description : Plusieurs lecteurs audio wav controllés par un arduino   * Description : Plusieurs lecteurs audio wav controllés par un arduino
-  * Fichiers sources : //mettre un lien// +  * Fichiers sources : {{ :projets:lecteurs_audio_dfplayer:audioplayer3.zip |}}
-  * Lien //mettre un lien//+
  
 {{tag>dflplayer, audio, wav, arduino, impédance}} {{tag>dflplayer, audio, wav, arduino, impédance}}
Ligne 28: Ligne 27:
 {{ :projets:lecteurs_audio_dfplayer:circuitlamartine_schema.png?direct&200 |}} {{ :projets:lecteurs_audio_dfplayer:circuitlamartine_schema.png?direct&200 |}}
 Le circuit pour deux lecteurs indépendants comprends donc: Le circuit pour deux lecteurs indépendants comprends donc:
-  * deux DFplayers+  * deux DFplayers : outre leur connection à l'arduino, il est nécessaire de **connecter ensemble les deux pins de masse** par un câble le plus court possible pour éviter tout ajout de bruit numérique.
   * un arduino nano qui centralise les contrôles et communique avec les DFplayers   * un arduino nano qui centralise les contrôles et communique avec les DFplayers
   * deux boutons par lecteur pour choisir la piste à lire   * deux boutons par lecteur pour choisir la piste à lire
Ligne 35: Ligne 34:
 Le potentiomètre qui ne figure pas sur le schéma est connecté comme suit : {{:projets:lecteurs_audio_dfplayer:potard.jpg?direct&200|}} Le potentiomètre qui ne figure pas sur le schéma est connecté comme suit : {{:projets:lecteurs_audio_dfplayer:potard.jpg?direct&200|}}
 ===== Code ===== ===== Code =====
-Guide pas à pas pour la réalisation du projet.+Le code utilisé par l'arduino utilise la librairie standard SoftwareSerial ainsi que la librairie [[https://github.com/DFRobot/DFRobotDFPlayerMini|DFRobotDFPlayerMini]] . Il est écrit de façon modulaire pour pouvoir aisément ajouter des lecteurs. Un //struct// représente chaque lecteur, les pins de ses boutons de lecture, une entrée analogique pour le volume ainsi qu'un pointeur vers l'instance de SoftwareSerial par qui il communique. 
 +Un //define// ligne 5 permet d'activer ou de désactiver le contrôle numérique du volume via un potentiomètre connecté sur une entrée analogique. 
 +En première lecture, la sortie DAC émet un buzz audible de quelques secondes, probablement le temps de charger un condensateur. Pour éviter ce défaut, un fichier est lu pendant 3 secondes à l'initialisation du lecteur. Cette astuce ne fonctionne que si un casque est connecté.
  
-===== Photos ===== +<file c++>#include "Arduino.h" 
-Code pour afficher les images du projet : +#include "SoftwareSerial.h" 
-<code>{{gallery>?&crop&lightbox}}</code>+#include "DFRobotDFPlayerMini.h" 
 +#define MAXVOLUME 30 
 +#define MAX_INITIALISATION_ATTEMPTS 5 
 +//#define volumeControl
  
 +SoftwareSerial softwareSerial1(10, 11); // RX, TX
 +SoftwareSerial softwareSerial2(2, 3); // RX, TX
 +DFRobotDFPlayerMini Player1;
 +DFRobotDFPlayerMini Player2;
  
 +struct player {
 +  String name;
 +  int button1pin;
 +  int button2pin;
 +  int potPin;
 +  bool button1State;
 +  bool button2State;
 +  int volume;
 +  SoftwareSerial* serial;
 +  DFRobotDFPlayerMini &player;
 +};
 +
 +player player1 = {"player1", 4, 5, A0, HIGH, HIGH, 0, &softwareSerial1, Player1};
 +player player2 = {"player2", 6, 7, A1, HIGH, HIGH, 0, &softwareSerial2, Player2};
 +
 +
 +void printDetail(uint8_t type, int value);
 +
 +void setup()
 +{
 +  Serial.begin(115200);
 +  pinMode(LED_BUILTIN, OUTPUT);
 +  digitalWrite(LED_BUILTIN, LOW);
 +  delay(300);
 +  initialise(player1);
 +  delay(2000);
 +  initialise(player2);
 +  delay(2000);
 +  digitalWrite(LED_BUILTIN, HIGH);
 +}
 +
 +void loop() {
 +  DFRobotDFPlayerMini *test = &player1.player;
 +  playerHandle(&player1);
 +  playerHandle(&player2);
 +  delay(100);
 +}
 +
 +void initialise(player DFplayer) {
 +  pinMode(DFplayer.button1pin, INPUT_PULLUP);
 +  pinMode(DFplayer.button2pin, INPUT_PULLUP);
 +  for (int i=0; i< MAX_INITIALISATION_ATTEMPTS; i++) {
 +    DFplayer.serial->begin(9600);
 +    if (!DFplayer.player.begin(*DFplayer.serial)) {  //Use softwareSerial to communicate with mp3.
 +      Serial.println("Unable to begin " + DFplayer.name);
 +      Serial.println(F("1.Please recheck the connection!"));
 +      Serial.println(F("2.Please insert the SD card!"));
 +      }
 +    else {
 +      
 +      Serial.println(F("DFPlayer Mini online."));
 +      DFplayer.player.setTimeOut(500); //Set serial communication time out 500ms
 +      //----Set volume----
 +      DFplayer.player.volume(MAXVOLUME);  //Set volume value (0~30).
 +      //----Set different EQ----
 +        DFplayer.player.EQ(DFPLAYER_EQ_BASS);
 +      //----Set device we use SD as default----
 +      DFplayer.player.outputDevice(DFPLAYER_DEVICE_SD);
 +      //----Mp3 control----
 +      DFplayer.player.enableDAC();  //Enable On-chip DAC
 +      delay(300);
 +      DFplayer.player.play(1); //play for 3 seconds to eliminate the buzz which occurs the first time any file is played.
 +      delay(3000);
 +      DFplayer.player.stop();
 +      return;
 +    }
 +    //delay(2000);
 +  }
 +  Serial.println("Unable to initialise "+ DFplayer.name+ ", rebooting\n\n");
 +  delay(300);
 +  asm volatile ("  jmp 0"); // reboot the arduino hoping this would help somehow
 +}
 +
 +
 +void playerHandle (player *DFplayer) {
 +  bool button1 = digitalRead(DFplayer->button1pin);
 +  bool button2 = digitalRead(DFplayer->button2pin);
 +  int potValue = analogRead(DFplayer->potPin);
 +  DFRobotDFPlayerMini Player = DFplayer->player;
 +  if (button1 == LOW && DFplayer->button1State == HIGH) Player.play(1);
 +  if (button2 == LOW && DFplayer->button2State == HIGH) Player.play(2);
 +  #ifdef volumeControl
 +  int volume = map(potValue, 0, 1023, 0, MAXVOLUME);
 +  if (volume != DFplayer->volume) {Player.volume(volume); Serial.println(volume);}
 +  DFplayer->volume = volume;
 +  #endif
 +  DFplayer->button1State = button1;
 +  DFplayer->button2State = button2;
 +}
 +</file>
  
/home/resonancg/www/wiki/data/attic/projets/lecteurs_audio_dfplayer/accueil.1559917655.txt.gz · Dernière modification: 2019/06/07 16:27 de laurent