Et pour la partie son j'ai trouvé sur ce site:
site ce code:
# Include <FatReader.h>
# Include <SdReader.h>
# Include <avr/pgmspace.h>
# Include "WaveUtil.h"
# include "WaveHC.h"
SdReader carte; / / Cet objet contient les informations de la carte
vol FatVolume; / / Ceci est l'information pour la partition sur la carte
racine FatReader; / / Ceci est l'information pour le système de fichiers sur la carte
dirLevel uint8_t; / / niveau de retrait pour le fichier et les noms de dir (pour prettyPrinting)
dirBuf dir_t; / / buffer pour le répertoire lit
WaveHC vague; / / Il s'agit de la seule vague (audio) objet, puisque nous allons jouer qu'un seul à un moment
/ Définitions / fonction (nous les définissons ici, mais le code est ci-dessous)
nulle LSR (FatReader & D);
nulle jeu (FatReader & dir);
vide de configuration () {
série . commencer (9600); / / Mise en place de bibliothèque série à 9600 bps pour le débogage
putstring_nl ( "test \ nWave!" ); / / dire nous nous sommes réveillés!
putstring ( "Free RAM:" ); / / Ceci peut faciliter le débogage, à court de RAM est mauvaise
série . println (FreeRAM ());
/ / Définit les broches de sortie pour le contrôle du CAD. Cette repères sont définis dans la bibliothèque
pinMode (2, SORTIE );
pinMode (3, SORTIE );
pinMode (4, SORTIE );
pinMode (5, SORTIE );
/ / If (! Card.init (true)) {/ / lecture avec 4 MHz spi si 8MHz ne fonctionne pas pour vous
, si (! card.init ()) { / / jeu avec 8 MHz spi (par défaut plus rapide!)
putstring_nl ( "Échec de l'initialisation de carte.!" ); / / Quelque chose s'est mal passé, permet d'imprimer les raisons pour lesquelles
sdErrorCheck ();
alors (1); / / puis «arrêt» - ne rien faire!
}
/ / Enable optimiser lire - Certaines cartes peuvent timeout. Désactiver si vous rencontrez des problèmes
card.partialBlockRead ( vrai );
/ / Maintenant nous allons regarder pour une partition FAT!
partie uint8_t;
pour (une partie = 0; partie <5; partie + +) { / / nous avons jusqu'à 5 emplacements pour regarder dans
le cas (vol.init (carte, qui fait partie))
break; / / nous avons trouvé un, permet de renflouer
}
si (partie == 5) { / / si nous avons fini par ne pas trouver un: (
putstring_nl ( "Pas de partition FAT valide!" );
sdErrorCheck (); / / Quelque chose s'est mal passé, permet d'imprimer les raisons pour lesquelles
tout (1); / / puis «arrêt» - ne rien faire!
}
/ / Permet de dire à l'utilisateur de ce nous avons trouvé
putstring ( «Utilisation de la partition" );
série . d'impression (partie, décembre );
putstring ( ", le type est FAT" );
série . println (vol.fatType (), décembre ); / / FAT16 ou FAT32?
/ / Essayez d'ouvrir le répertoire racine
si (! root.openRoot (vol)) {
putstring_nl ( "! Impossible d'ouvrir le répertoire racine" ); / / Quelque chose s'est mal passé,
alors que (1); / / puis «arrêt» - ne rien faire!
}
/ / Ouf! Nous avons passé les parties dures.
putstring_nl ( "Fichiers trouvés:" );
dirLevel = 0;
/ / Imprimer tous les fichiers dans tous les répertoires.
LSR (racine);
}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / LOOP
vide boucle () {
root.rewind ();
jouer (racine);
}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / AIDANTS
/ / Cette fonction pratique vous renvoyer le nombre d'octets actuellement libres dans la mémoire RAM, idéal pour le débogage!
int FreeRAM ( vide )
{
extern int __bss_end;
extern int * __brkval;
int free_memory;
si (( int ) __brkval == 0) {
free_memory = (( int ) & free_memory) - (( int ) & __bss_end);
}
d'autre {
free_memory = (( int ) & free_memory) - (( int ) __brkval);
}
retourner free_memory;
}
/ *
* message d'erreur d'impression et de halte si une carte SD I / O error, grande pour le débogage!
* /
vide sdErrorCheck ( vide )
{
si (card.errorCode ()!) retour ;
putstring ( "\ n \ RSD I / O error:" );
série . d'impression (card.errorCode (), HEX );
putstring ( "," );
série . println (card.errorData (), HEX );
tandis que (1);
}
/ *
print * champ Nom dir_t. La sortie est au format 8.3, si semblable à Sound.wav ou nom_fichier.dat
* /
vide printName (dir_t & dir)
{
pour (uint8_t i = 0; i <11; i + +) { / / format 8.3 dispose de 8 +3 = 11 lettres dans l'
, si (dir.name [i] == '' )
continuer; / / n'est plus imprimer les espaces dans le nom
, si (i == 8)
de série . d'impression ( '.' ); / / après la lettre du 8, placer un point
de série . d'impression (dir.name [i]); / / imprimer le n-ième chiffre
}
si (DIR_IS_SUBDIR (dir))
de série . d'impression ( '/' ); / / répertoires obtenir un / à la fin
}
/ *
liste * de manière récursive - débordement de pile possible que si les sous-répertoires imbriqués trop
* /
vide LSR (FatReader & D)
{
r int8_t; / / indique le niveau de récursivité
tandis que ((r = d.readDir (dirBuf))> 0) { / / lire le fichier suivant dans le répertoire
/ / sous-répertoires saut. et ..
si (dirBuf.name [0] == '.' )
continuer;
pour (uint8_t i = 0; i <dirLevel; i + +)
de série . d'impression ( ' ); / / c'est pour prettyPrinting, mis des espaces à l'avant
printName (dirBuf); / / imprimer le nom du fichier que nous venons de trouver
de série . println (); / / et une nouvelle ligne
si (DIR_IS_SUBDIR (dirBuf)) { / / Nous allons recurse sur n'importe quel direcory
s FatReader; / / créer un objet nouveau répertoire pour stocker les informations
dirLevel + = 2; / / tiret 2 places pour des tirages futurs
si (s.open (vol, dirBuf))
LSR (s); ! / / lister tous les fichiers dans ce répertoire maintenant
dirLevel - = 2; / / supprimer l'indentation supplémentaire
}
}
sdErrorCheck (); / / sommes-nous doign OK?
}
/ *
* jouer de manière récursive - débordement de pile possible que si les sous-répertoires imbriqués trop
* /
vide jeu (FatReader & dir)
{
Fichier FatReader;
tandis que (dir.readDir (dirBuf)> 0) { / / lire tous les fichiers dans le répertoire un à la fois
/ / sauter. et .. répertoires
si (dirBuf.name [0] == '.' )
continuer;
Série . println (); / / efface une nouvelle ligne
pour (uint8_t i = 0; i <dirLevel; i + +)
de série . d'impression ( ' ); / / c'est pour prettyPrinting, mis des espaces à l'avant
si {(File.Open (vol, dirBuf)!) / / ouvrir le fichier dans le répertoire
de série . println ( "File.Open a échoué" ); / / quelque chose n'allait pas: (
tout en (1); / / halt
}
si (file.isDir ()) { / / vérifier si nous avons ouvert un nouveau répertoire
putstring ( "Subdir:" );
printName (dirBuf);
dirLevel + = 2; / / ajouter d'autres espaces
/ Les Dossiers / jeux en sous-répertoire
de jeu (fichier); / / récursive!
dirLevel - = 2;
}
d'autre {
/ / Ah! nous avons trouvé un fichier qui n'est pas un répertoire
putstring ( "Lecture en cours» ); printName (dirBuf); / / l'imprimer
si (! wave.create (fichier)) { / / Figure dehors, est-ce un bon WAV?
putstring ( " Pas valable WAV " ); / / ok, il ignorer
} autre {
série . println (); ! / / Hourra il EST un bon WAV
wave.play (); / / faire du bruit!
tandis que (wave.isplaying) { / / playing se produit des interruptions, afin que nous imprimer des points en temps réel
putstring ( "." );
retard (100);
}
sdErrorCheck (); ? / / tout est OK
/ / if (wave.errors) Serial.println (wave.errors) / / vague des erreurs de décodage
}
}
}
}
alors peut il être utilisé directement? donc il vas lire tous les fichiers de la carte?
la bibliothèque qu'est ce que je dois faire après l'avoir téléchargé ou la déplacer?