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:48]
laurent [Code]
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 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 =====
-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.+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.1559918897.txt.gz · Dernière modification: 2019/06/07 16:48 de laurent