Diffusion de messages audios

Bonjour à tous, j’essaye de diffuser un message audio à l’aide d’une carte Arduino Ethernet.

Je joins au post une photo de mon montage (pas très clair, je m’excuse), mais le montage ne semble pas être la cause de mes maux (J’ai essayer avec l’exemple toneMelody et il jouait les notes) le soucis vient donc très probablement de mon code le code en question est valider par le logiciel lors du téléversement, le problème vient donc d’autre part ^^’.

J’ai essayer 2 codes différents (pris sur Internet et adapter légèrement a mes besoins) et le problème provient probablement de mes légère modification et/ ou des différence entre mon projet et les projets donc je me suis inspiré.

Voici des les 2 codes :

#include <SPI.h>
#include <SD.h> // Inclure la librairie SD
#include <TMRpcm.h> 



#include <SD.h>           // need to include the SD library  
#include <TMRpcm.h>      // also need to include this library...  

 TMRpcm tmrpcm;  // create an object for use in this sketch  
 unsigned long time = 0;  
 void setup(){  
  tmrpcm.speakerPin = 8; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc  
  //Complimentary Output or Dual Speakers:  
  //pinMode(10,OUTPUT); Pin pairs: 9,10 Mega: 5-2,6-7,11-12,46-45   
  Serial.begin(9600);  
   Serial.print("Initializing SD card...");  
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.  
  // Note that even if it's not used as the CS pin, the hardware SS pin   
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output   
  // or the SD library functions will not work.   
   pinMode(4, OUTPUT);  
  if (!SD.begin(4)) {  
   Serial.println("initialization failed!");  
   return;  
  }  
  Serial.println("initialization done.");  
  tmrpcm.play("son2.wav"); //the sound file "music" will play each time the arduino powers up, or is reset  
 }  
 void loop(){   
 
  if(Serial.available()){    
   switch(Serial.read()){  
   case 'd': tmrpcm.play("test1.wav"); break;  
   case 'P': tmrpcm.play("son2.wav"); break;  
   case 't': tmrpcm.play("theme.wav"); break;  
   case 'p': tmrpcm.pause(); break;  
   case '?': if(tmrpcm.isPlaying()){ Serial.println("A wav file is being played");} break;  
   case 'S': tmrpcm.stopPlayback(); break;  
   case '=': tmrpcm.volume(1); break;  
   case '-': tmrpcm.volume(0); break;  
   case '0': tmrpcm.quality(0); break;  
   case '1': tmrpcm.quality(1); break;  
   default: break;  
   }  
  }}

et

File myFile;
TMRpcm tmrpcm;

char caractere; // Définition du caractère pour la gestion dans le moniteur série

void setup(){
  Serial.begin(9600); // début de la communication série
  tmrpcm.speakerPin = 8; // Speaker sur la pin 9
  tmrpcm.setVolume(7); // gestion du volume de 0 à 7
  tmrpcm.quality(1); // qualitée audio 0 ou 1
  
  // Initialisation de la carte SD
  if (!SD.begin (4)) { 
    Serial.println("initialization failed!"); //  S'il y a un soucis "initialization failed!" s'affichera au moniteur
    return;
  }
  
  
}

void loop(){
    if(Serial.available()){
      caractere = Serial.read();
      if(caractere == 'a'){ 
      Serial.println("Lecture");  
        tmrpcm.play("Sound/test2.wav");
      }
      if(caractere == 'z'){ 
      Serial.println("Lecture");  
        tmrpcm.play("Sound/son1.wav");
      }
    }
}

void playSound(char *file){
 tmrpcm.play(file);
 return; 
}

Bonsoir
Je ne sais pas si cela vient de là, mais il me semble qu'il faille faire une modif dans la lib (pcmConfig.h) pour l'utiliser avec un UNO

The library uses two timer pins by default. This may interfere with other libraries that use it. (pin 10 on Arduino Uno)
Disable the second pin by uncommenting the line #define DISABLE_SPEAKER2 in pcmConfig.h
Boards like Uno only have one 16-bit timer. #define USE_TIMER2 can be uncommented in pcmConfig.h if TIMER1 is required for something else. See the Advanced Features wiki page

Merci pour ta réponse :slight_smile:

Tu as attiré mon regard sur les variables est j’ai remarqué que dans #include <pcmConfig.h> la partie “pcmConfig.h” n’est pas en rouge, je pense que je n’ai donc simplement pas la librairie “pcmConfig.h” mais après recherche, je n’ai trouvé aucun lien me permettant de la téléchargé :confused:

Quelqu’un aurai t’il un lien svp ?

Capture.PNG

pcmConfig.h fait partie de tmrpcm

bonsoir
+1 avec la reponse precedente

aukazou 8)

Copie de la lib modifiée que j'utilise OK avec UNO

Ok j’ai enlevé la ligne vu qu’elle était inutile … j’ai fait quelque tests en changeant des choses, mais … marche toujours pas … mais j’ai quelques nouvelles questions :

1.Mes fichiers audio sont en .wav sur ma carte SD, et dans mon programme j’ai marqué :

tmrpcm.play("sound/test1.wav

mais est ce que l’extension doit être derrière le nom du fichier ? (voir document annexe pour les 2 possibilité), c’est pour savoir si il cherche le .wav dans les propriétés du fichier ou dans son nom.

2.Est ce que mes fichiers audio doivent obligatoirement se trouver (ou pas) dans un fichier(sur la carte SD) ?

3.Suis-je obligée de définir le volume et la qualité dans le programmme avec :

  tmrpcm.setVolume(7); 
  tmrpcm.quality(1);

zrg.PNG

bonjour
fais un test avec le programme ci-dessous et le fichier pac1.wav qui doit se trouver à la racine de ta carte sd

// fichier wav audacity projet 16000 , mono , 8 bit pcm

#include <SD.h>                      // need to include the SD library
//#define SD_ChipSelectPin 53  //example uses hardware SS pin 53 on Mega2560
#define SD_ChipSelectPin 4  //using digital pin 4 on arduino nano 328, can use other pins
#include <TMRpcm.h>           //  also need to include this library...
#include <SPI.h>
int pinspeak=9;
TMRpcm tmrpcm;   // create an object for use in this sketch

unsigned long time = 0;
int val=0;


void setup(){

  tmrpcm.speakerPin = pinspeak; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
  //Complimentary Output or Dual Speakers:
  //pinMode(10,OUTPUT); Pin pairs: 9,10 Mega: 5-2,6-7,11-12,46-45 
  Serial.begin(115200);
  tmrpcm.setVolume(5);
  
  pinMode(13,OUTPUT); 
  pinMode(5,INPUT_PULLUP);
  
  if (!SD.begin(SD_ChipSelectPin)) {  // see if the card is present and can be initialized:
    Serial.println("SD fail");  
    return;   // don't do anything more if not

  }
  else{   
    Serial.println("SD ok");   
  }
  
  tmrpcm.play("pac1.wav"); 
}



void loop(){  
  

}

pac1.wav

J'ai essayer le programme 3 fois :

  1. Avec le dossier téléchargé mais portant le nom d'origine (qui était : "GCCqAqN7yer_pac1") et ça n'a pas marché. Résultat = rien

  2. Avec un de mes dossier audio à la place de pac1. Résultat = rien

  3. En renommant le dossier d'origine "pac1". Résultat = le speaker fait un bruit de vibration, mais pas de musique.

Dans les 3 cas la carte SD c'est bien initialisée, je pense que le problème peut venir du speaker, ou du montage ( les caractéristique technique du speaker ne sont peu être pas les mêmes entre "diffuser des notes avec toneMelody" et "diffuser des dossier .wav")