Lägga till ljus upp effekter i bakgård spel som Cornhole (7 / 16 steg)
Steg 7: Arduino koden
Här är en kopia av den kod som jag använde för detta projekt. Du kan kopiera och klistra in den i en ny skiss eller hämta kodfilen.
#include
#include #include #include "WaveUtil.h" #include "WaveHC.h"
SdReader kort; Detta objekt innehåller information för kort FatVolume vol; Detta innehåller information för partitionen på kort FatReader rot; Detta innehåller information för filsystemet på kort FatReader f; Detta innehåller information för filen vi är spelar
WaveHC våg; Detta är enda våg (audio)-objektet, eftersom vi bara kommer att spela en i taget
#define DÄMPNINGSTID 100 / / knappen debouncer
int ledPin = 6;
Denna behändiga funktionen returnerar antalet byte för närvarande gratis i RAM, bra för felsökning! int freeRam(void) {extern int __bss_end; extern int * __brkval; int free_memory; om ((int) __brkval == 0) {free_memory = ((int) & free_memory)-((int) & __bss_end);} annat {free_memory = ((int) & free_memory)-((int) __brkval);} återvända free_memory;}
void sdErrorCheck(void) {om (! card.errorCode()) avkastning, putstring ("\n\rSD I/O fel:"); Serial.Print(Card.ErrorCode(), HEX); putstring (","); Serial.println(Card.errorData(), HEX); While(1); }
<---installationsprogrammet för void void setup() {/ / ställa upp serial port Serial.begin(9600), putstring_nl ("WaveHC med 6 knappar"), putstring ("fri slå ned:"); Detta kan hjälpa till med felsökning, slut RAM är dålig Serial.println(freeRam()); om detta är under 150 byte kan det stava problem! Ställa in produktionen stift för DAC kontroll. Detta stift definieras i biblioteket pinMode (13, OUTPUT);
om (! card.init(true)) {//play med 4 MHz spi om 8MHz inte fungerar för dig om (! card.init()) {//play med 8 MHz spi (standard snabbare!) putstring_nl ("kort init. misslyckades!"); Något gick fel, kan skriva ut varför sdErrorCheck(); While(1); sedan 'stoppa' - gör ingenting! } / / Aktivera optimera Läs - vissa kort kan timeout. Inaktivera om du har problem card.partialBlockRead(true); Nu söker vi en FAT-partition! uint8_t del; för (del = 0; del < 5; del ++) {/ / vi har upp till 5 platser att leta i om (vol.init (kort, del)) paus; / / Vi hittade en, låter borgen} om (del == 5) {/ / om vi slutade inte att hitta en :(putstring_nl ("ingen giltig FAT-partition!"); sdErrorCheck(); / / något gick fel, kan skriva ut varför while(1); / / sedan 'stoppa' - gör ingenting!} / / kan tala om för användaren om vad vi hittade putstring ("använda partition"); Serial.Print (del, DEC); putstring (", typ är FAT"); Serial.println(Vol.fatType(),dec); FAT16 eller FAT32? Försöker öppna rotkatalogen om (! root.openRoot(vol)) {putstring_nl ("kan inte öppna rotfästa dir!"); / / något gick fel, while(1); / / sedan 'stoppa' - gör ingenting!} / / Puh! Vi fick tidigare de hårda delarna. putstring_nl("ready!");
pinMode (ledPin, produktionen); }
//<------------------------------------------------------------------------------------- Void Loop
void loop() {/ / putstring("."); / / avkommentera här för att se om slingan inte är kör
int sensorValue = 0; int sensorPin = 5; int sensorThreshold = 200.
sensorValue = analogRead(sensorPin); Läs ingångsstiftet
Serial.println(sensorValue); debug värde
IF(sensorValue > sensorThreshold) {Serial.println (spela upp ljud och ljus"), digitalWrite (ledPin, hög); / / sätter LED på playcomplete("1.WAV"), digitalWrite (ledPin, låg); / / sätter LED av delay(500);
} }
Spelar en full fil från början till slut med ingen paus. void playcomplete(char *name) {/ / kalla våra hjälpare att hitta och spela detta namn playfile(name); samtidigt (wave.isplaying) {/ / gör ingenting när man dess spelar} / / nu dess gjort spelar}
void playfile(char *name) {/ / se om objektet våg för närvarande gör något om (wave.isplaying) {/ / redan spelar något, så sluta det! wave.stop(); / / stoppa det} / / titta i rotkatalogen och öppna filen om (! f.open (rot, namn)) {putstring ("kunde inte öppna filen"); Serial.Print(Name); hemkomst. } / / OK läsa filen och förvandla det till en våg objekt om (! wave.create(f)) {putstring_nl ("inte en giltig WAV"), återvänder;} / / ok tid att spela! starta uppspelning wave.play(); }