Étape 10 : Codes
Télécharger arduino 1.0.En outre, avant d’utiliser le code allez à http://www.ladyada.net/make/waveshield/use.html.
Vous devriez formater la carte SD, convertir des fichiers audio comme le suggère dans ce site.
Aussi, n’oubliez pas de mettre l’audio convertir vers la carte SD.
Arduino Code que nous avons utilisé :
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include « WaveUtil.h »
#include « WaveHC.h »
Carte de SdReader ; Cet objet conserve les informations de la carte
Vol FatVolume ; Il conserve les informations pour la partition sur la carte
FatReader racine ; Il conserve les informations pour le 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
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 ;
Si ((int) __brkval == 0) {}
free_memory = ((int) & free_memory)-((int) & __bss_end) ;
}
else {}
free_memory = ((int) & free_memory)-((int) __brkval) ;
}
Return free_memory ;
}
Sub sdErrorCheck(void)
{
Si (! card.errorCode()) retourner ;
putstring ("\n\rSD I/O erreur:") ;
Serial.Print(Card.ErrorCode(), HEX) ;
putstring (",") ;
Serial.println(Card.ErrorData(), HEX) ;
while(1) ;
}
void setup() {}
mettre en place le port série
Serial.Begin(9600) ;
Serial.println(freeRam()) ; 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
Si (! card.init(true)) {//play avec 4 MHz spi si 8MHz ne fonctionne pas pour vous
Si (! card.init()) {//play avec spi 8 MHz (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
Si (vol.init (carte, partie))
rupture ; 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 ("partition à l’aide") ;
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 a mal tourné,
while(1) ; puis « arrêter » - ne rien faire !
}
Ouf ! Nous avons passé les parties difficiles.
putstring_nl("Ready!") ;
}
void loop() {}
putstring(".") ; Décommentez pour voir si la boucle n’est pas en cours d’exécution
int sensorValue ;
sensorValue = analogRead(2) ; lire les broches d’entrée analogique 2
if(sensorValue<100) {/ / ce détermine la chanson nous jouons
playcomplete ("l’eau. « « « WAV ») ;
playcomplete ("vendredi. « « « WAV ») ;
}
ElseIf (sensorValue > = 100 & & sensorValue < 250) {}
playcomplete "(milkbaby. « « « WAV ») ;
playcomplete ("baby. "WAV");}
else {playcomplete ("coke. « « « WAV ») ;
playcomplete "(myjeans. « « « WAV ») ;
}
}
void playcomplete(char *name) {}
Appelez notre aide pour trouver et jouer ce nom
playfile(Name) ;
tandis que (wave.isplaying) {//while il joue !
int16_t potval = 450 ;
uint32_t newsamplerate ;
int16_t lastpotval = 0 ;
#define hystérésis 3
int sensorValue ;
sensorValue = analogRead(5) ; lu 5 d’entrée qui est le capteur de lumière ambiant
if(sensorValue<10) {}
Break;} Si nous arrivons à proximité du capteur de lumière ambiant, il arrête la chanson et remplacez-la par une autre musique
C’est le code qui change la vitesse
potval = analogRead(0) ; lire le capteur coude et modifications de ce code, la vitesse en fonction du capteur
Si (((potval-lastpotval) > hystérésis) || ((lastpotval-potval) > hystérésis)) {
newsamplerate = wave.dwSamplesPerSec ; obtenir la fréquence d’échantillonnage original
newsamplerate * = potval ; mettre à l’échelle de la valeur analogique
newsamplerate / = 512 ; Nous voulons « split » entre 2 x accéléré et ralenti.
wave.setSampleRate(newsamplerate) ; Réglez-le immédiatement !
Serial.println (newsamplerate, DEC) ; pour le débogage
lastpotval = potval ;
}
Serial.Print(potval,DEC) ;
Delay(100) ;
}
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 d’elle !
Wave.Stop() ;
Arrête
}
Regardez dans le répertoire racine et ouvrir le fichier
Si (! f.open (racine, nom)) {}
putstring ("Impossible d’ouvrir le fichier") ; Serial.Print(Name) ; retour ;
}
OK, lire le fichier et le transformer en un objet vague
Si (! wave.create(f)) {}
putstring_nl ("pas un valide" WAV") ; retour ;
}
OK le temps de jouer ! Démarrer la lecture
Wave.Play();}