Modifications

Sauter à la navigation Sauter à la recherche
1 272 octets ajoutés ,  14 mars 2012 à 21:28
Ligne 31 : Ligne 31 :  
Nous avons placé ce sketch en bas de cet article au cas où vous en auriez besoin.
 
Nous avons placé ce sketch en bas de cet article au cas où vous en auriez besoin.
   −
== Initialize the card ==
+
== Initialiser la carte ==
   −
The hard work of playing music is all done right on the Arduino. This lets us skip having an MP3 decoder or other dedicated chip. That means more control and flexibility, but more firmware! Lets take a tour through the canonical sketch "dapHC.pde" this is a Digital Audio Player (dap) sketch using the Wave HC librarry. We used to use the Adafruit AF_Wave library but Mr. Fat16 did a fantastic job rewriting our code and making it faster, smaller and better. So we're going to use his library in this tutorial :)
+
Les tâches complexes nécessaires au rendu musical est assuré par Arduino. Cela nous épargne d'avoir recours à un décodeur MP3ou autre circuit dédicacé. Cela signifie plus de contrôle et de flexibilité mais aussi pas de firmware!  
   −
Download the dapHC.pde sketch and read along! The first thing we need are some objects. The tough part is talking to the card. All cards are manufactured and formatted a little different. And the formatting has many layers - the card format - the partition format and the filesystem formatting. At the beginning of the sketch we have the #include to get the library header files in and an object for storing information about the card '''card''', partition volume '''vol''' and filesystem '''root'''. We also have a directory buffer, for information on any folder/directories and an object for storing information about a single wave file wave
+
Faisons donc un tour d'horizon du sketch "dapHC.pde". C'est un sketch de type "Digital Audio Player" (dap) utilisant la librairie Wave HC. Nous avions écrit ce projet pour l'utilisé avec notre librairie Adafruit AF_Wave mais Mr. Fat16 à réalisé un fantastique travail en réécrivant notre code en le rendant plus rapide, plus petit et meilleur. Donc nous allons utiliser sa librairie pour ce tutoriel :)
   −
These are all pretty much manditory unless perhaps you dont want directory traversal in which case you can probably skip '''dirBuf'''
+
Téléchargez le sketch dapHC.pde et prenez le temps de le lire. La première chose dont nous avons besoin sont quelques objets. La partie la plus difficile est de dialoguer avec la carte. Toutes les cartes sont fabriquée et formattées différemment (juste un peu). Et le formatage repose sur différentes couches - le format de la carte - Le format de la partition et le formatage du système de fichier.
 +
 
 +
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'''.
 +
 
 +
Nous avons aussi un tampon pour les répertoires, contenant des informations sur tous les répertoires (folders) et un objet stockant des information à propos d'un seul fichier wave.
 +
 
 +
Ils sont tous obligatoires à moins que vous ne désiriez pas lire la liste des fichiers. Dans ce cas, vous pouvez probablement vous passer de '''dirBuf'''
 
  <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;    // Cet objet maintien des informations sur la carte
FatVolume vol;    // This holds the information for the partition on the card
+
FatVolume vol;    // Maintien des information due la partition de la carte
FatReader root;  // This holds the information for the filesystem on the card
+
FatReader root;  // Maintien des information sur le système de fichier de la carte
   −
uint8_t dirLevel; // indent level for file/dir names    (for prettyprinting)
+
uint8_t dirLevel; // Niveau d indentation pour fichiers et répertoire (pour un affichage plus sympa)
dir_t dirBuf;    // buffer for directory reads
+
dir_t dirBuf;    // tampon pour les lectures des répertoires
   −
WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time
+
WaveHC wave;      // Le seul objet wave (audio), puisque nous jouons une seul fichier à la fois
 
</nowiki>
 
</nowiki>
First thing that must be done is initializing the SD card for reading. This is a multistep process. In the setup loop you can see the multiple checks we do as we proceed through the initialization process
     −
Here are the steps:
+
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.
# '''Wake up and print''' out the to Serial Monitor that we're running '''(OPTIONAL)'''
+
 
# '''Check how much free RAM we have''' after we have used the buffer for storing Wave audio data, make sure its more than 100 bytes and keep an eye on it as you modify your code. This test can be removed, its for your use '''(OPTIONAL)'''
+
Voici les étapes:
# '''Set the pin modes for the DAC''' control lines. These should not be changed unless you've modified them in the library as well. Its probably best to keep them as-is
+
# '''Initialisation et affichage''' sur la connexion série pour indiquer que nous démarrons '''(OPTIONNEL)'''
# '''Initialize the SD card''' and see if it responds. We try to talk to it at 8MHz. If you have a waveshield 1.0 you may need to use 4MHz mode so comment out one line and uncommment the other to swap which method is used. If the card fails to initialize, print out an error and halt.
+
# '''Vérifier la quantité de mémoire disponible''' après avoir utilisé la mémoire tampon pour stocker les données audio du Wave, faite en sorte qu'il reste plus de 100 octets (bytes) et gardez un oeil dessus si vous modifiez votre code. Ce test peut être enlevé, il n'est destiné qu'a votre information '''(OPTIONNEL)'''
# '''Allow partial block reads'''. Some SD cards don't like this so if you're having problems, comment this out first! (OPTIONAL)
+
# '''Initialise les pin modes pour le DAC''' (lignes de contrôles du DAC). Cela ne devrait pas être modifié à moins que vous ayez aussi modifié la librairie. Il est certainement préférable de les garder tels quels.
# '''Try to find a FAT partition''' in the first 5 slots. You did format the card to FAT format, right? If it cant find a FAT partition it will print out that it failed, so make sure you format it again if its giving you trouble
+
# '''Initialiser la carte SD''' et vérifier qu'elle réponde. Nous essayons de l'adresser à 8MHz. Si vous disposez d'un Shield Wave 1.0 vous pourriez avoir besoin d'utiliser le mode 4MHz (dé-commentez/re-commentez la ligne appropriée en fonction de la méthode utilisée). Si la carte ne s'initialise pas, alors afficher une erreur et arrêter.
# '''Print out what kind of FAT''' partition was found '''(OPTIONAL)'''
+
# '''Autoriser la lecture de bloc partiel'''. Certaines cartes SD n'apprécient pas vraiment. Commenter en priorité cette ligne si vous avez des problèmes! (OPTIONNEL)
# '''Try to open up the root directory'''. If this doesnt work, something is messed up with the formatting. Try to format it again!
+
# '''Essayer de trouver la partition FAT''' dans les 5 premiers slots. Vous avez bien formatez votre carte en FAT n'est-ce pas? S'il ne peut pas trouver la partition FAT il affichera un message d'erreur. En cas de problème, assurez vous que vous avez bien formaté la carte en FAT (quitte à re-formater la carte).
# Finally, print out the files found, one after the other in the directories on the card. This is great for debugging and will show you what you've got on there. Since we dont have long filename access and use the 'base' 8.3 format to define files, you'll need to see what the files are named on the partition and this helps a lot '''(OPTIONAL)'''
+
# '''Affiche le type de partition FAT''' qui a été trouvée '''(OPTIONNEL)'''
 +
# '''Essaye d'ouvrir le répertoire racine'''. Si cela ne fonctionne pas, c'est que quelque-chose s'est mal déroulé au cours du formatage. Essayer de formater la carte une fois de plus!
 +
# Finalement, afficher l'un après l'autre les fichiers trouvés dans les répertoires de la carte. C'est vraiment génial pour déboguer et vous montrera ce qui est disponible sur la carte. Puisque nous n'utilisons pas de nom de fichier long mais le format de base 8.3 pour définir les fichiers, vous aurez besoin de voir comment les fichiers sont nommés sur la partition (et cela peut vraiment aider beaucoup) '''(OPTIONNEL)'''
    
   <nowiki>void setup() {
 
   <nowiki>void setup() {
   Serial.begin(9600);          // set up Serial library at 9600 bps for debugging
+
   Serial.begin(9600);          // initialise la libraire serie a 9600 bauds pour deboguer
 
    
 
    
   putstring_nl("\nWave test!");  // say we woke up!
+
   putstring_nl("\nWave test!");  // Indiquer le "demarrage"!
 
    
 
    
   putstring("Free RAM: ");      // This can help with debugging, running out of RAM is bad
+
   putstring("Free RAM: ");      // cela peut aider pour deboguer, ne plus avoir assez de RAM est mauvais signe
 
   Serial.println(freeRam());   
 
   Serial.println(freeRam());   
 
   
 
   
   // Set the output pins for the DAC control. This pins are defined in the library
+
   // Initialiser les pins pour le controle du DAC. Ces pins sont définies dans la librairie
 
   pinMode(2, OUTPUT);
 
   pinMode(2, OUTPUT);
 
   pinMode(3, OUTPUT);
 
   pinMode(3, OUTPUT);
Ligne 78 : Ligne 85 :  
   pinMode(5, OUTPUT);
 
   pinMode(5, OUTPUT);
 
    
 
    
   //  if (!card.init(true)) { //play with 4 MHz spi if 8MHz isn't working for you
+
   //  if (!card.init(true)) { //spi cadence a 4 MHz si 8MHz ne fonctionne pas
   if (!card.init()) {        //play with 8 MHz spi (default faster!)   
+
   if (!card.init()) {        //spi cadencé a 8 MHz (par defaut, le plus rapide!)   
     putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
+
     putstring_nl("Init Carte. Echec!");  // Quelque chose ne marche pas, affichons pourquoi
 
     sdErrorCheck();
 
     sdErrorCheck();
     while(1);                            // then 'halt' - do nothing!
+
     while(1);                            // Et arrêtons (ne plus rien faire)!
 
   }
 
   }
 
    
 
    
   // enable optimize read - some cards may timeout. Disable if you're having problems
+
   // Activer la lecture optimisee - Certaines cartes pourrait bloquer (timeout). Desactiver en cas de probleme
 
   card.partialBlockRead(true);
 
   card.partialBlockRead(true);
 
    
 
    
   // Now we will look for a FAT partition!
+
   // Recherche 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++) {    // Vérifier dans les 5 slots disponibles
 
     if (vol.init(card, part))  
 
     if (vol.init(card, part))  
       break;                            // we found one, lets bail
+
       break;                            // Nous en avons trouvé un, sortons de la boucle
 
   }
 
   }
   if (part == 5) {                      // if we ended up not finding one :(
+
   if (part == 5) {                      // Terminé la boucle sans trouvé de partitions :(
     putstring_nl("No valid FAT partition!");
+
     putstring_nl("Pas de partition FAT valide!");
     sdErrorCheck();      // Something went wrong, lets print out why
+
     sdErrorCheck();      // Qlque chose ne va pas, affichons pourquoi
     while(1);                            // then 'halt' - do nothing!
+
     while(1);                            // et arreter le programme (ne plus rien faire)!
 
   }
 
   }
 
    
 
    
   // Lets tell the user about what we found
+
   // Indiquons à l'utilisateur ce que nous avons trouvé
   putstring("Using partition ");
+
   putstring("Utilise la partition ");
 
   Serial.print(part, DEC);
 
   Serial.print(part, DEC);
   putstring(", type is FAT");
+
   putstring(", type est FAT");
   Serial.println(vol.fatType(),DEC);    // FAT16 or FAT32?
+
   Serial.println(vol.fatType(),DEC);    // FAT16 ou FAT32?
 
    
 
    
   // Try to open the root directory
+
   // Essayer d ouvrir 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 répertoire racine!"); // Quelque chose ne va pas,
     while(1);                            // then 'halt' - do nothing!
+
     while(1);                            // et arreter le programme (ne plus rien faire)!
 
   }
 
   }
 
    
 
    
   // Whew! We got past the tough parts.
+
   // Whaow! nous avons passé toutes les étapes difficiles.
   putstring_nl("Files found:");
+
   putstring_nl("Fichiers trouvés:");
 
   dirLevel = 0;
 
   dirLevel = 0;
   // Print out all of the files in all the directories.
+
   // Afficher tous les fichiers dans tous les répertoires.
 
   lsR(root);
 
   lsR(root);
 
}
 
}
29 917

modifications

Menu de navigation