Stap 7: De Code van de Arduino
Hier is een kopie van de code die ik voor dit project gebruikte. U kunt kopiëren en plakken in een nieuwe schets of download het codebestand.
#include
#include #include #include "WaveUtil.h" #include "WaveHC.h"
Kaart van de SdReader; Dit object bevat de gegevens voor de kaart FatVolume vol; Dit bevat de informatie voor de partitie op de kaart FatReader wortel; Dit bevat de gegevens voor het bestandssysteem op de kaart FatReader f; Dit bevat de gegevens voor het bestand we aan het spelen bent
WaveHC Golf; Dit is de enige Golf (audio) object, omdat we zullen slechts één filter tegelijk spelen
#define DEBOUNCE 100 / / button debouncer
int ledPin = 6;
deze handige functie geeft het aantal bytes in het RAM, momenteel gratis groot voor debugging! int freeRam(void) {extern int __bss_end; extern int * __brkval; int free_memory; als (__brkval (int) == 0) {free_memory = ((int) & free_memory)-((int) & __bss_end);} anders {free_memory = ((int) & free_memory)-(__brkval (int));} return free_memory;}
VOID sdErrorCheck(void) {als (! card.errorCode()) terugkeer; putstring ("\n\rSD I/O fout:"); Serial.Print(Card.ErrorCode(), HEX); putstring (","); Serial.println(Card.errorData(), HEX); while(1); }
<---void Setup void setup {/ / instellen van seriële poort Serial.begin(9600) putstring_nl ("WaveHC met 6 knoppen"); putstring ("vrije RAM:"); Dit kan helpen met het opsporen van fouten, lopen uit RAM is slechte Serial.println(freeRam()); Als dit onder 150 bytes kan het problemen magie! De pennen voor de DAC-besturingselement instellen Deze pennen worden gedefinieerd in de bibliotheek pinMode (13, OUTPUT);
Als (! card.init(true)) {//play met 4 MHz spi als 8MHz niet voor u werkt als (! card.init()) {//play met 8 MHz spi (standaard sneller!) putstring_nl ("Card init. mislukt!"); Er ging iets mis, laat uitprinten waarom sdErrorCheck(); while(1); vervolgens 'stoppen' - niets doen! } / / inschakelen optimaliseren lees - sommige kaarten kunnen timeout. Uitschakelen als u problemen card.partialBlockRead(true) ondervindt; Nu gaan we voor een FAT-partitie! uint8_t deel; voor (deel = 0; deel < 5; deel ++) {/ / Wij hebben maximaal 5 "slots" om te zoeken in als (vol.init (kaart, deel)) onderbreking; / / wij één gevonden, laat borgtocht} als (deel == 5) {/ / als we uiteindelijk niet het vinden van een :(putstring_nl ("geen geldige FAT-partitie!"); sdErrorCheck(); / / iets misgegaan, laat uitprinten waarom while(1); / / vervolgens 'stoppen' - niets doen!} / / laat de gebruiker te vertellen over wat we gevonden putstring ("Using partitie"); Serial.Print (deel, DEC); putstring (", type is vet"); Serial.println(vol.fatType(),DEC); FAT16 of FAT32? Probeert te openen van de root directory als (! root.openRoot(vol)) {putstring_nl ("kan niet openen root dir!"); / / er ging iets mis, while(1); / / vervolgens 'stoppen' - niets doen!} / / Oef! Daar kregen we voorbij de harde delen. putstring_nl("Ready!");
pinMode (ledPin, OUTPUT); }
//<------------------------------------------------------------------------------------- Void Loop
void loop {/ / putstring("."); / / uncomment dit om te zien als de lus niet actief
int sensorValue = 0; int sensorPin = 5; int sensorThreshold = 200;
sensorValue = analogRead(sensorPin); Lees de invoer pin
Serial.println(sensorValue); debug waarde
if(sensorValue > sensorThreshold) {Serial.println ("geluiden afspelen en lichten"); digitalWrite (ledPin, hoge); / / sets van de LED op playcomplete("1.WAV"), digitalWrite (ledPin, laag); / / Hiermee stelt u de LED uit delay(500);
} }
Speelt een volledige bestand van begin tot eind met geen pauze. ongeldig playcomplete(char *name) {/ / Bel onze helper te vinden en spelen deze naam playfile(name); terwijl (wave.isplaying) {/ / niets te doen tijdens het spelen van haar} / / nu zijn gedaan spelen}
ongeldig playfile(char *name) {/ / zien als de Golf-object is momenteel bezig met iets als (wave.isplaying) {/ / al het spelen van iets, dus stoppen! wave.stop(); / / stoppen} / / kijken in de root directory en open het bestand als (! f.open (root, naam)) {putstring ("kon niet open bestand"); Serial.Print(name); terugkeer; } / / OK lezen van het bestand en zet hem in een golf-object als (! wave.create(f)) {putstring_nl ("niet een geldig WAV"); terugkeer;} / / ok tijd om te spelen! Start afspelen wave.play(); }