Modifications

Sauter à la navigation Sauter à la recherche
1 364 octets ajoutés ,  30 août 2013 à 20:24
aucun résumé de modification
Ligne 21 : Ligne 21 :  
Notez que la librairie est vraiment grosse (approximativement 10K). Si vous voulez faire beaucoup plus avec Arduino, il est vivement conseillé de faire un Upgrade vers un [http://www.ladyada.net/library/arduino/upgrade.html ATmega328]. Ce shield a été développé en prévoyant la disponibilité d'un ATmega328.
 
Notez que la librairie est vraiment grosse (approximativement 10K). Si vous voulez faire beaucoup plus avec Arduino, il est vivement conseillé de faire un Upgrade vers un [http://www.ladyada.net/library/arduino/upgrade.html ATmega328]. Ce shield a été développé en prévoyant la disponibilité d'un ATmega328.
   −
== A tour of play6_hc.pde ==
+
== Introduction à play6_hc.pde ==
   −
This is a tutorial of the [http://code.google.com/p/wavehc/ waveHC library] by going through [http://www.ladyada.net/media/wavshield/wavehc_play6.pde play6_hc.pde (you can download it here)]
+
Ceci est un tutoriel pour la [http://code.google.com/p/wavehc/ librairie waveHC]. Vous pouvez télécharger le fichier [http://www.ladyada.net/media/wavshield/wavehc_play6.pde play6_hc.pde play6_hc.pde ici]
   −
Its detailed and a little daunting. But stick with it since much of the code is going to be duplicated from this sketch to others!
+
Ce tutoriel un détaillé et un peu intimidant. Mais attardez vous puisque la plupart du code peut être dupliqué d'un sketch à l'autre.
   −
Make sure you install the library by downloading it from the link above and sticking WaveHC folder in the '''libraries''' folder.
+
Assurez vosu que vous avez installé la librairie en la téléchargeant depuis le lien ci dessus et placé dans un sous-répertoire WaveHC de votre répertoire "'''libraries'''".
   −
In case you need the sketch we're referring to here, its at the bottom of the page
+
Nous avons placé ce sketch en bas de cet article au cas où vous en auriez besoin.
    
== Initialiser la carte ==
 
== Initialiser la carte ==
Ligne 41 : Ligne 41 :  
Au début du sketch nous avons l' #include qui incorpore le fichier d'entête de la librairie (fichier header) files ainsi qu'un objet '''card''' qui stocke les information concernant la carte, un autre '''vol''' relatif à la partition (partition volume) et le système de fichier '''root'''.  
 
Au début du sketch nous avons l' #include qui incorpore le fichier d'entête de la librairie (fichier header) files ainsi qu'un objet '''card''' qui stocke les information concernant la carte, un autre '''vol''' relatif à la partition (partition volume) et le système de fichier '''root'''.  
   −
**** We also have an object for holding the current file information f and an object for storing information about a single wave file wave ****
+
Nous avons aussi un objet '''f''' qui maintient les information du fichier coutant et un objet '''wave''' qui gère un simple fichier wave.
 
  <nowiki>#include "WaveUtil.h"
 
  <nowiki>#include "WaveUtil.h"
 
#include "WaveHC.h"
 
#include "WaveHC.h"
      −
SdReader card;    // This object holds the information for the card
+
SdReader card;    // Objet qui maintient les information sur la carte SD
FatVolume vol;    // This holds the information for the partition on the card
+
FatVolume vol;    // Maintient les informations sur la partition de la carte
FatReader root;  // This holds the information for the filesystem on the card
+
FatReader root;  // Maintient les informations sur le système de fichier de la carte
FatReader f;      // This holds the information for the file we're playing
+
FatReader f;      // Maintient les informations sur le fichier que nous jouons
      −
WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time
+
WaveHC wave;      // C'est le seul objet (audio) wave, puisque nous jouons un seul morceau à la fois
   −
#define DEBOUNCE 100  // button debouncer
+
#define DEBOUNCE 100  // déparasitage bouton
 
</nowiki>
 
</nowiki>
 
La première chose à faire est d'initialiser la carte SD pour faire des lectures. C'est un processus qui se réalise en plusieurs étapes. Dans la fonction setup vous pouvez voir les différentes vérification qui sont faites par le processus d'initialisation.
 
La première chose à faire est d'initialiser la carte SD pour faire des lectures. C'est un processus qui se réalise en plusieurs étapes. Dans la fonction setup vous pouvez voir les différentes vérification qui sont faites par le processus d'initialisation.
Ligne 69 : Ligne 69 :     
  <nowiki>void setup() {
 
  <nowiki>void setup() {
   // set up serial port
+
   // intialisation du port série
 
   Serial.begin(9600);
 
   Serial.begin(9600);
   putstring_nl("WaveHC with 6 buttons");
+
   putstring_nl("WaveHC avec 6 boutons");
 
    
 
    
   putstring("Free RAM: ");      // This can help with debugging, running out of RAM is bad
+
   putstring("Free RAM: ");      // Aide au débogage, ce n'est pas bien de ne plus avoir de RAM
   Serial.println(freeRam());      // if this is under 150 bytes it may spell trouble!
+
   Serial.println(freeRam());      // Si c'est en dessous de 150 octets (bytes) nous aurons des soucis!
 
    
 
    
   // Set the output pins for the DAC control. This pins are defined in the library
+
   // Initialise les pins de sortie pour le contrôle DAC control.  
 +
  // Ces pins sont aussi définies dans la librairie
 
   pinMode(2, OUTPUT);
 
   pinMode(2, OUTPUT);
 
   pinMode(3, OUTPUT);
 
   pinMode(3, OUTPUT);
Ligne 82 : Ligne 83 :  
   pinMode(5, OUTPUT);
 
   pinMode(5, OUTPUT);
 
   
 
   
   // pin13 LED
+
   // LED sur pin13  
 
   pinMode(13, OUTPUT);
 
   pinMode(13, OUTPUT);
 
   
 
   
   // enable pull-up resistors on switch pins (analog inputs)
+
   // Activer la résistance Pull-Up sur les broches des boutons (entrée analogiques)
 
   digitalWrite(14, HIGH);
 
   digitalWrite(14, HIGH);
 
   digitalWrite(15, HIGH);
 
   digitalWrite(15, HIGH);
Ligne 93 : Ligne 94 :  
   digitalWrite(19, HIGH);
 
   digitalWrite(19, HIGH);
 
   
 
   
   //  if (!card.init(true)) { //play with 4 MHz spi if 8MHz isn't working for you
+
   //  if (!card.init(true)) { //SPI cadencé à 4 MHz (à utiliser si 8MHz ne fonctionne pas)
   if (!card.init()) {        //play with 8 MHz spi (default faster!)   
+
   if (!card.init()) {        //SPI cadencé ) 8 MHz (le plus rapide par défaut!)   
     putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
+
     putstring_nl("Echec init. carte!");  // Qlque chose va de travers, affichons donc pourquoi
 
     sdErrorCheck();
 
     sdErrorCheck();
     while(1);                            // then 'halt' - do nothing!
+
     while(1);                            // Et 'arrêter' (ne rien faire!)
 
   }
 
   }
 
    
 
    
   // enable optimize read - some cards may timeout. Disable if you're having problems
+
   // Activer l'optimisation de lecture - Certaines cartes ne répondent pas.  
 +
  // Désactivez la ligne suivante si vous rencontrez des problèmes
 
   card.partialBlockRead(true);
 
   card.partialBlockRead(true);
 
   
 
   
// Now we will look for a FAT partition!
+
  // Recherhe de la partition FAT!
 
   uint8_t part;
 
   uint8_t part;
   for (part = 0; part < 5; part++) {    // we have up to 5 slots to look in
+
   for (part = 0; part < 5; part++) {    // Recherche dans les 5 premiers slots
 
     if (vol.init(card, part))  
 
     if (vol.init(card, part))  
       break;                            // we found one, lets bail
+
       break;                            // Trouvez? alors sortir de la boucle
 
   }
 
   }
   if (part == 5) {                      // if we ended up not finding one :(
+
   if (part == 5) {                      // Pas trouvé de partition FAT? :(
     putstring_nl("No valid FAT partition!");
+
     putstring_nl("Partition FAT invalide!");
     sdErrorCheck();     // Something went wrong, lets print out why
+
     sdErrorCheck();                     // Qlque chose va de travers, afficher pourquoi
     while(1);                            // then 'halt' - do nothing!
+
     while(1);                            // Et 'Arrêter' - (ne rien faire)!
 
   }
 
   }
 
    
 
    
   // Lets tell the user about what we found
+
   // Indiquons à l'utilisateur ce que nous avons trouvé
   putstring("Using partition ");
+
   putstring("Utiliser partition ");
 
   Serial.print(part, DEC);
 
   Serial.print(part, DEC);
   putstring(", type is FAT");
+
   putstring(", type de FAT");
   Serial.println(vol.fatType(),DEC);    // FAT16 or FAT32?
+
   Serial.println(vol.fatType(),DEC);    // FAT16 ou FAT32?
 
    
 
    
   // Try to open the root directory
+
   // Ourvir le répertoire racine
 
   if (!root.openRoot(vol)) {
 
   if (!root.openRoot(vol)) {
     putstring_nl("Can't open root dir!"); // Something went wrong,
+
     putstring_nl("Echec ouverture rep. racine!"); // Qlqchose ne fonctionne pas,
     while(1);                             // then 'halt' - do nothing!
+
     while(1);                                     // alors 'arrêter' (ne plus rien faire)!
 
   }
 
   }
 
    
 
    
   // Whew! We got past the tough parts.
+
   // Whoaw! Nous avons réaliser toutes les étapes.
   putstring_nl("Ready!");
+
   putstring_nl("Prêt!");
 
   dirLevel = 0;
 
   dirLevel = 0;
 
}
 
}
 
</nowiki>
 
</nowiki>
   −
== Button interfacing ==
+
== Interfaçage des boutons ==
   −
We want to play a sound each time a button is pressed. We will use a function called check_switches() that goes through the 6 buttons (digital 14 through 20) to see if they have been pressed. If so, we play '''SOUND1.WAV''' (for example) completely through. The function that we call here that does the playing is called '''playcomplete()''' and we pass the name of the Wave file in quotes just like you see here.
+
Nous voulons jouer un son à chaque fois qu'un bouton est pressé
 +
Nous allons utiliser une fonction nommée check_switches() qui passe les 6 boutons en revue (digital de 14 à 20) pour voir si ils ont été pressés. Si c'est le ca, nous complètement jouons le fichier '''SOUND1.WAV''' (par exemple). La fonction que nous appelons pour jouer le morceau s'appelle '''playcomplete()''' et nous passons le nom du fichier Wave en paramètre (entre guillemet, comme ci-dessous).
 
  <nowiki>void loop() {
 
  <nowiki>void loop() {
   //putstring(".");            // uncomment this to see if the loop isnt running
+
  // retirez le commentaire de la ligne ci-dessous pour voir si la loop() fonctionne.
 +
  // Si la loop ne fonctionne pas, c'est qu'il y a un problème d’initialisation de la carte SD.
 +
   //putstring(".");             
 
   switch (check_switches()) {
 
   switch (check_switches()) {
 
     case 1:
 
     case 1:
Ligne 184 : Ligne 189 :  
</nowiki>
 
</nowiki>
   −
== Playcomplete & Playfile ==
+
== les fonctions Playcomplete et Playfile ==
   −
Here is where we open the file and play it.
+
Voici le code correspondant à l'ouverture de fichier et au rendu audio de celui-ci.
   −
'''Playcomplete''' is very simple, it just calls a function that starts the audio playback and then sits in a loop doing nothing.
+
'''Playcomplete''' est une fonction vraiment simple. Elle appelle la fonction qui commence à jouer le fichier audio et qui démarre un boucle d'attente (boucle qui ne fait rien).
   −
'''Playfile''' is the important function. It finds and opens the file and plays it.
+
'''Playfile''' est une fonction importante. Elle trouve le fichier et le joue.
   −
# It first sees if we're already playing any audio. If so, it stops it.
+
Voici plus de détails sur la fonction Playfile:
# Now it opens the root directory and looks for the file by the name we requested. If it cant find it, the function returns
+
# Elle vérifie si un fichier est déjà entrain d'être joué. Si c'est le cas, elle le stoppe.
# If it finds it, it tries to turn it into a Wave file object, looking for the right header in the file. If not it also returns
+
# Elle ouvre ensuite le répertoire racine (root) et recherche le fichier avec le nom attendu. Si le fichier n'est pas trouver alors l'exécution de la fonction est interrompu (instruction "return")
# If it succeeds, it begins to play
+
# Si le fichier est trouvé, elle essaye de l'ouvrir avec l'objet Wave (qui vérifie si l'entête wave est bien présente). Si ce n'est pas le cas alors l'exécution de la fonction est interrompu (instruction "return")
 +
# Si l'opération fonctionne alors la fonction commence à jouer le fichier
   −
  <nowiki>// Plays a full file from beginning to end with no pause.
+
  <nowiki>// Joue un fichier entier jusqu'à la fin sans faire de pause.
 
void playcomplete(char *name) {
 
void playcomplete(char *name) {
   // call our helper to find and play this name
+
   // Appelle la fonction (dite "helper") pour trouver et jouer le fichier
 
   playfile(name);
 
   playfile(name);
 
   while (wave.isplaying) {
 
   while (wave.isplaying) {
   // do nothing while its playing
+
   // Ne rien faire tant que le fichier est joué
 
   }
 
   }
   // now its done playing
+
   // Maintenant, le fichier est terminé
 
}
 
}
    
void playfile(char *name) {
 
void playfile(char *name) {
   // see if the wave object is currently doing something
+
   // Vérifier si l'objet wave fait déjà quelque chose
   if (wave.isplaying) {// already playing something, so stop it!
+
   if (wave.isplaying) {// Joue déja un morceur, on l'arrête!
     wave.stop(); // stop it
+
     wave.stop(); // arrêter le morceau
 
   }
 
   }
   // look in the root directory and open the file
+
   // Chercher dans le répertoire racine et ouvrir le fichier
 
   if (!f.open(root, name)) {
 
   if (!f.open(root, name)) {
     putstring("Couldn't open file "); Serial.print(name); return;
+
     putstring("Echec ouverture fichier "); Serial.print(name); return;
 
   }
 
   }
   // OK read the file and turn it into a wave object
+
   // OK, lire le fichier et le transformer en objet Wave
 
   if (!wave.create(f)) {
 
   if (!wave.create(f)) {
     putstring_nl("Not a valid WAV"); return;
+
     putstring_nl("Fichier WAV invalide"); return;
 
   }
 
   }
 
    
 
    
   // ok time to play! start playback
+
   // Tout s'est bien passé! Commence la lecture
 
   wave.play();
 
   wave.play();
 
}
 
}
Ligne 227 : Ligne 233 :     
== play6_hc.pde ==
 
== play6_hc.pde ==
 +
Note de MCHobby:
 +
 +
Voici le contenu complet du projet.
 +
 +
Cette fois, les commentaires ne sont pas traduits. Pour plus de détails sur le fonctionnement, vous pouvez vous référez au explications ci-dessus où les commentaires ont étés traduits.
 +
 
  <nowiki>#include <FatReader.h>
 
  <nowiki>#include <FatReader.h>
 
#include <SdReader.h>
 
#include <SdReader.h>
Ligne 407 : Ligne 419 :  
}
 
}
 
</nowiki>
 
</nowiki>
 +
 +
{{WaveShield-TRAILER}}
29 917

modifications

Menu de navigation