Étape 7: Le Code de l’Arduino
Voici une copie du code que j’ai utilisé pour ce projet. Vous pouvez copier et coller dans une nouvelle esquisse ou télécharger le fichier de code.
#include
#include #include #include « WaveUtil.h » #include « WaveHC.h »
Carte de SdReader ; Cet objet conserve les informations pour le vol de FatVolume de carte ; Il conserve les informations pour la partition sur la racine de FatReader carte ; Il conserve les informations du système de fichiers sur la carte FatReader f ; Il conserve les informations pour le fichier que nous allons jouer
WaveHC vague ; C’est le seul objet (audio) de la vague, puisque nous allons jouer seulement un à la fois
#define DEBOUNCE 100 / / bouton debouncer
int ledPin = 6 ;
Cette fonction pratique retournera le nombre d’octets actuellement libres en RAM, grand pour le débogage ! int freeRam(void) {extern int __bss_end ; extern int * __brkval ; int free_memory ; if ((int) __brkval == 0) {free_memory = ((int) & free_memory)-((int) & __bss_end);} else {free_memory = ((int) & free_memory)-((int) __brkval);} return free_memory;}
void sdErrorCheck(void) {si (! card.errorCode()) retour ; putstring ("\n\rSD I/O erreur:") ; Serial.Print(Card.ErrorCode(), HEX) ; putstring (",") ; Serial.println(Card.ErrorData(), HEX) ; while(1) ; }
<---Setup void void setup() {/ / set up série port Serial.begin(9600) ; putstring_nl ("WaveHC avec 6 boutons"); putstring ("RAM libre:") ; Ce qui peut aider avec le débogage, manquer de RAM est Serial.println(freeRam()) mauvais ; s’il s’agit moins de 150 octets Il peut épeler ennuis ! Définissez les broches de sortie pour le contrôle de la DAC. Ce broches sont définis dans la bibliothèque pinMode (13, sortie) ;
Si (! card.init(true)) {//play avec 4 MHz spi si 8MHz ne fonctionne pas pour vous si (! card.init()) {//play avec 8 MHz spi (par défaut plus rapide!) putstring_nl ("carte init. a échoué!") ; Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles sdErrorCheck() ; while(1) ; puis « arrêter » - ne rien faire ! } / / enable optimiser la lecture - certaines cartes peuvent timeout. Désactiver si vous rencontrez des problèmes card.partialBlockRead(true) ; Maintenant, on va chercher une partition FAT ! uint8_t partie ; pour (partie = 0; partie < 5; partie ++) {/ / nous avons jusqu'à 5 emplacements de regarder dans if pause (vol.init (carte, partie)); / / nous avons trouvé un, laisse en liberté sous caution} si (partie == 5) {/ / si nous avons fini ne pas trouver un:(putstring_nl ("aucun FAT partition valide!"); sdErrorCheck(); / / quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles while(1); / / puis « arrêter » - ne rien faire!} / / permet d’indiquer à l’utilisateur sur ce que nous avons trouvé putstring (« Using partition ») ; Serial.Print (partie, DEC) ; putstring (", est de type FAT") ; Serial.println(vol.fatType(),DEC) ; 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 passait mal, while(1); / / puis « arrêter » - ne rien faire!} / / ouf ! Nous avons passé les parties difficiles. putstring_nl("Ready!") ;
pinMode (ledPin, sortie) ; }
//<------------------------------------------------------------------------------------- Void Loop
void loop() {/ / putstring("."); / / décommenter cela pour voir si la boucle n’est pas en cours d’exécution
int sensorValue = 0 ; int sensorPin = 5 ; int sensorThreshold = 200 ;
sensorValue = analogRead(sensorPin) ; lire l’entrée pin
Serial.println(sensorValue) ; valeur de débogage
if(sensorValue > sensorThreshold) {Serial.println ("sons et lumières"); digitalWrite (ledPin, HIGH); / / définit la LED playcomplete("1.WAV") ; digitalWrite (ledPin, LOW); / / définit la LED éteinte delay(500) ;
} }
Lit un fichier complet de bout en bout avec aucune pause. void playcomplete(char *name) {/ / appeler notre aide pour trouver et jouer cette playfile(name) nom ; while (wave.isplaying) {/ / ne rien faire pendant sa lecture} / / maintenant sa fait jouer}
void playfile(char *name) {/ / voir si l’objet vague est en train de faire quelque chose si (wave.isplaying) {/ / déjà jouer quelque chose, alors arrêtez il! wave.stop(); / / stop il} / / Rechercher dans le répertoire racine et ouvrez le fichier si (! f.open (racine, nom)) {putstring ("Impossible d’ouvrir le fichier") ; Serial.Print(Name) ; retour ; } / / OK, lire le fichier et qu’il devienne un objet vague si (! wave.create(f)) {putstring_nl ("pas un valide" WAV"); return;} / / ok temps de jouer ! Démarrez la lecture wave.play() ; }