DFPLAYER : jouer le son n

Bonjour,
j'ai donné ma solution pour faire fonctionner ce chip ici: https://forum.arduino.cc/t/dfplayer-saola-s2-coince/1132330

Je cherche maintenant à passer une variable à la fonction

player.play();

Le code suivant fonctionne parfaitement

void loop() 
{
player.play(5);
delay(5000);
}

Mais avec celui ci dessous Je n'ai aucun résultat, ni aucun retour dans la console,
puis-je avoir vos avis.

void loop() {
  if (Serial.available() > 0) {      // Vérifie s'il y a des données disponibles
    char caractere = Serial.read();  // Lit le caractère entrant en code ascii

    Serial.printf("la touche tapée est : %c", caractere);

    if (isdigit(caractere)) {             // Vérifie si le caractère est un chiffre
      uint16_t nombre = caractere - '0';  // Convertit le caractère en un entier
                                          //en ascii le nombre 0 a pour code 48 , en soustrayant 48 du nombre entrant on obtient le bon nombre et pas le code ascii qui est un nombre 48x plus élevé

      player.play(nombre);
      Serial.printf("le nombre correspondant est : %c", nombre);

      delay(5000);//laisser le DFPLAYER jouer le son avant de boucler 
    }
  }
}

Postez tout le code y compris le setup
Quel Arduino ?

(J’ai déplacé le post dans le forum principal c’est mieux que dans le bar pour des questions de code)

Parfait merci.
Je suis sur ESP32-S2-WROOM-I avec un DFPLAYER GD3200B

#include "HardwareSerial.h"
#include "DFRobotDFPlayerMini.h"  //lib native du DFPLAYER par la cnie DFRobot

const byte RXD2 = 16;  // Connects to module's RX
const byte TXD2 = 17;  // Connects to module's TX


HardwareSerial dfSD(1);  // Use UART channel 1
DFRobotDFPlayerMini player;

void setup() {
  //Serial1.begin(9600, SERIAL_8N1,16,17);//RX,TX sur le port serial1 qui est le 3eme UART du SAOLA S2, voir https://forum.arduino.cc/t/comment-utiliser-avec-esp32s2-laffichage-sur-port-serie/941511/21?u=romainl
  Serial.begin(19200);
  dfSD.begin(9600, SERIAL_8N1, RXD2, TXD2);  // 16,17
  delay(5000);

  if (player.begin(dfSD)) {
    Serial.println("OK");

    // Set volume to maximum (0 to 30).
    player.volume(25);  //30 is very loud
  } else {
    Serial.println("Connecting to DFPlayer Mini failed!");
  }
}

void loop() {
  if (Serial.available() > 0) {      // Vérifie s'il y a des données disponibles
    char caractere = Serial.read();  // Lit le caractère entrant en code ascii

    //Serial.print(caractere);
    Serial.printf("la touche tapée est : %c", caractere);

    if (isdigit(caractere)) {             // Vérifie si le caractère est un chiffre
      uint16_t nombre = caractere - '0';  // Convertit le caractère en un entier
                                          //en ascii le nombre 0 a pour code 48 , en soustrayant 48 du nombre entrant on obtient le bon nombre et pas le code ascii qui est un nombre 48x plus élevé
     

      player.play(nombre);
       //Serial.print(nombre);
      Serial.printf("le nombre correspondant est : %c", nombre);

      delay(5000);//
    }
  }
}

Bonjour,

Comme nombre est un nombre, le format doit être "le nombre correspondant est : %d"

1 Like

Est ce que quelque chose s’affiche ou rien du tout? (Les messages du setup )

Avez vous le bon débit dans le moniteur série ?

1 Like

Bonsoir, j'ai enfin un code qui marche :grinning:
-il établi correctement la liaison avec le DFPLAYER
-il permet de faire jouer un fichier son de la carte SD en tapant son numéro dans le serial
-il établi correctement la liaison en UART avec l'ESP32SAOLA via Serial0
-il affiche correctement la touche enfoncée dans le moniteur

Un grand merci aux contributeurs de ce forum
voici le code que j'utilise :grinning:

/*
DFPLAYER avec chip GD3200B: 
https://github.com/enjoyneering/DFPlayer

ESP32-SAOLA-S1-WROOM-I



Topics:
DFPLAYER play file number
https://forum.arduino.cc/t/dfplayer-jouer-le-son-n/1138600/3

PRINT et PORTS UART
https://forum.arduino.cc/t/print-nest-pas-universel/1138645/9
https://forum.arduino.cc/t/acquisition-oscilloscope-demande-de-conseils/1135232/15

UART sur SAOLA
https://forum.arduino.cc/t/acquisition-oscilloscope-demande-de-conseils/1135232/18

help codes DFPLAYER
https://forum.arduino.cc/t/esp32-and-dfplayermini-not-working-for-me/1011138/13 1

*/

#include "HardwareSerial.h"
#include "DFRobotDFPlayerMini.h"  //lib native du DFPLAYER par la cnie DFRobot

const byte RXD2 = 16;  // Connects to module's RX
const byte TXD2 = 17;  // Connects to module's TX


HardwareSerial dfSD(1);  // Use UART channel 1
DFRobotDFPlayerMini player;

void setup() {
  //Serial1.begin(9600, SERIAL_8N1,16,17);//RX,TX sur le port serial1 qui est le 3eme UART du SAOLA S2, voir https://forum.arduino.cc/t/comment-utiliser-avec-esp32s2-laffichage-sur-port-serie/941511/21?u=romainl
  Serial0.begin(115200);                        // Use UART channel 0 pour la connexion USB et les retours print() dans la console
  Serial0.println("Salut, je suis une vroum");  //test


  //Use hardware Serial pour la com avec DFPLAYER
  dfSD.begin(9600, SERIAL_8N1, RXD2, TXD2);  // 16,17
  delay(5000);

  if (player.begin(dfSD)) {
    Serial0.println("liaison UART avec DFPLAYER OK !");

    // Set volume to maximum (0 to 30).
    player.volume(25);  //30 is very loud
  } else {
    Serial0.println("Connecting to DFPlayer Mini failed!");
  }
}

void loop() {
  if (Serial0.available() > 0) {      // Vérifie s'il y a des données disponibles
    char caractere = Serial0.read();  // Lit le caractère entrant en code ascii

    //Serial0.print(caractere);
    Serial0.printf("la touche tapée est : %c", caractere);
    Serial0.println();

    if (isdigit(caractere)) {             // Vérifie si le caractère est un chiffre
      uint16_t nombre = caractere - '0';  // Convertit le caractère en un entier
                                          //en ascii le nombre 0 a pour code 48 , en soustrayant 48 du nombre entrant on obtient le bon nombre et pas le code ascii qui est un nombre 48x plus élevé

//Le fichier son est joué en son entier à moins qu'on appelle un nouveau numéro
      player.play(nombre);

      //Serial0.print(nombre);
      //ici comme nombre est un nombre, le format doit être %d
      Serial0.printf("le nombre correspondant est : %d", nombre);
      Serial0.println();
    }
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.