Stap 6: Arduino code
* http://www.ladyada.net/make/waveshield/download.html
*
* code aangepast ten opzichte van http://www.ladyada.net/media/wavshield/SampleRateMod.pde
*
* De oriëntatie van de versnellingsmeter is belangrijk voor deze code alleen goed uitvoeren. De
* versnellingsmeter moet ongeveer evenwijdig aan de Arduino, met de volumeregeling op de bovenkant als de
* apparaat berust op uw heup.
*/
#include < WaveHC.h >
#include < WaveUtil.h >
Kaart van de SdReader; Dit object bevat de gegevens voor de kaart
FatVolume vol; Dit houdt de informatie voor de partitie op de kaart
FatReader wortel; Dit bevat de informatie voor de hoofdmap van volume
FatReader bestand; Dit object vertegenwoordigt het WAV-bestand
WaveHC Golf; Dit is de enige Golf (audio) object, omdat we zullen slechts één filter tegelijk spelen
/*
* Het definiëren van macro om foutberichten in het flash-geheugen
*/
#define error(msg) error_P(PSTR(msg))
LED spullen
lange interval = 1000;
int ledPin = 7; het nummer van de LED-pin
int ledState = laag; ledState gebruikt voor het instellen van de LED
lange previousMillis = 0; laatste keer LED werd bijgewerkt zal slaan
//////////////////////////////////// SETUP
VOID Setup {}
pinMode (ledPin, OUTPUT);
Serial.begin(9600);
Serial.println ("Wave test!");
Probeer card.init(true) als er fouten optreden op V1.0 Wave Shield
Als (! card.init()) {}
fout ("Card init. mislukt!");
}
inschakelen optimaliseren lees - sommige kaarten kunnen timeout
card.partialBlockRead(true);
Als (! vol.init(card)) {}
fout ("geen partitie!");
}
Als (! root.openRoot(vol)) {}
fout kon niet ("open root");
}
putstring_nl ("bestanden gevonden:");
root.ls();
}
voorwaarts declarition
VOID playcomplete (FatReader & bestand);
//////////////////////////////////// LOOP
void loop {}
uint8_t i, r;
char c, naam [15];
dir_t dir;
root.Rewind();
Blader door de bestanden in de directory
terwijl (root.readDir(dir) > 0) {}
alleen spelen. WAV-bestanden
Als (! strncmp_P ((char *) & dir.name[8]. PSTR("wav"))) blijven;
Als (! file.open (vol, dir)) {}
putstring ("kan niet openen");
printEntryName(dir);
blijven;
}
putstring ("\n\rPlaying");
printEntryName(dir);
Serial.println();
playcomplete(File);
File.Close();
}
}
/////////////////////////////////// HELPERS
/*
* afdrukken foutbericht en stoppen
*/
VOID error_P (const char * str)
{
PgmPrint ("fout:");
SerialPrint_P(str);
sdErrorCheck();
while(1);
}
/*
* afdrukken foutbericht en stoppen als SD i/o-fout, zeer geschikt voor het opsporen van fouten!
*/
VOID sdErrorCheck(void)
{
Als (! card.errorCode()) keren;
PgmPrint ("\r\nSD I/O fout:");
Serial.Print(Card.ErrorCode(), HEX);
PgmPrint (",");
Serial.println(Card.errorData(), HEX);
while(1);
}
int16_t lastpotval = 0;
#define HYSTERESIS 3
/*
* bestand met Monster tariefwijzigingen afspelen
*/
ongeldig makeLEDsblink() {}
unsigned long currentMillis = millis();
putstring ("currentMillis ="); Serial.println(currentMillis);
putstring ("prevMillis ="); Serial.println(previousMillis);
putstring ("interval ="); Serial.println(interval);
Als (currentMillis - previousMillis > interval) {}
de laatste tijd u de LED knipperde besparen
previousMillis = currentMillis;
Als de LED is uit te schakelen het op en vice-versa:
Als (ledState == LOW) {}
ledState = hoog; }
else {}
ledState = laag;
}
de LED met de ledState van de variabele instellen
digitalWrite (ledPin, ledState);
}
}
VOID playcomplete (FatReader & bestand) {}
int16_t potval = 450;
uint32_t newsamplerate;
int counter1 = 0;
int counter2 = 0;
int accelValue;
Als (! wave.create(file)) {}
putstring_nl ("niet een geldig WAV"); terugkeer;
}
OK tijd om te spelen!
Wave.Play();
terwijl (wave.isplaying) {}
makeLEDsblink();
accelValue = analogRead(0);
Serial.println(accelValue);
Als (accelValue < 350) {}
counter2 ++;
}
Als (counter1 > 30) {}
Serial.println(counter2);
potval = (counter2 * 18) + 450;
counter1 = 0;
counter2 = 0;
}
Als (((potval-lastpotval) > HYSTERESIS) || ((lastpotval-potval) > HYSTERESIS)) {
putstring ("pot ="); Serial.println (potval, DEC);
putstring ("tickspersam ="); Serial.Print (wave.dwSamplesPerSec, DEC); putstring ("->");
newsamplerate = wave.dwSamplesPerSec;
newsamplerate * = potval;
newsamplerate / = 512; We willen 'split' tussen versneld en vertraagd.
Als (newsamplerate > 48000) {}
newsamplerate = 48000;
}
Als (newsamplerate < 1000) {}
newsamplerate = 1000;
}
wave.setSampleRate(newsamplerate);
interval = 7500000/newsamplerate;
putstring ("interval ="); Serial.println (potval, DEC); Serial.println(interval);
Serial.println (newsamplerate, DEC);
lastpotval = potval;
}
delay(100);
counter1 ++;
}
sdErrorCheck();
}