Stap 5: De Code van de Arduino
Hier is een kopie van de Code van de Arduino. U kunt ofwel het bijgevoegde codebestand downloaden, of u kunt kopiëren en plak deze tekst in een nieuwe schets.
Vervolgens sluit de Arduino board op uw computer en uploaden van de code.
#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
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 (2, OUTPUT); pinMode (3, OUTPUT); pinMode (4, OUTPUT); pinMode (5, OUTPUT); pin13 LED pinMode (13, OUTPUT); inschakelen van pull-up weerstanden op schakelaar pinnen (analoge ingangen) digitalWrite (14, hoge); digitalWrite (15, hoge); digitalWrite (16, hoge); digitalWrite (17, hoge); digitalWrite (18, hoge); digitalWrite (19, hoge); 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!"); }
//<------------------------------------------------------------------------------------- Void Loop
void loop {/ / putstring("."); / / uncomment dit om te zien als de lus niet actief int secretCodeOne [6] = {1, 2, 3, 4, 5, 6}; int secretCodeTwo [6] = {1, 1, 2, 2, 3, 3}; int secretCodeThree [6] = {2, 4, 6, 1, 3, 5}; int secretCodeFour [6] = {1, 2, 3, 5, 5, 5}; int secretCodeFive [6] = {1, 2, 3, 3, 2, 1}; int secretCodeSix [6] = {1 2, 3, 4, 5, 1};
int enteredCode [6] = {0, 0, 0, 0, 0, 0}; int correctKeys = 0; int succes = 0; byte gedrukt; opgeslagen waarden van knop ingedrukt int i = 0; iteratie van de lus
voor (ik = 0; ik < 6; i ++) //stores gedrukt van waarden in een matrix {doen {ingedrukt = check_switches();} terwijl (geperste < 1); enteredCode [i] = ingedrukt; //stores ingedrukt waarden in een matrix delay(500); Serial.println(enteredCode[i]); Print knop ingedrukt}
voor (ik = 0; ik < 6; i ++) //Check Code één {als (enteredCode [i] == secretCodeOne[i]) {correctKeys = correctKeys + 1; //counts juiste toetsen aantal}} als (correctKeys == 6) //if de ingevoerde code overeenkomt met code een, nummer één afspelen {Serial.println ("Code één juiste"); playcomplete("1.WAV"); succes = 1;} correctKeys = 0; juiste belangrijke teller instellen
voor (ik = 0; ik < 6; i ++) //Check Code twee {als (enteredCode [i] == secretCodeTwo[i]) {correctKeys = correctKeys + 1; //counts juiste toetsen aantal}} als (correctKeys == 6) //if de ingevoerde code overeenkomt met code een, nummer één afspelen {Serial.println ("Code twee Correct"); playcomplete("2.WAV"); succes = 1;} correctKeys = 0; juiste belangrijke teller instellen
voor (ik = 0; ik < 6; i ++) //Check Code drie {als (enteredCode [i] == secretCodeThree[i]) {correctKeys = correctKeys + 1; //counts juiste toetsen aantal}} als (correctKeys == 6) //if de ingevoerde code overeenkomt met code een, nummer één afspelen {Serial.println ("Code drie Correct"); playcomplete("3.WAV"); succes = 1;} correctKeys = 0; juiste belangrijke teller instellen
voor (ik = 0; ik < 6; i ++) //Check Code vier {als (enteredCode [i] == secretCodeFour[i]) {correctKeys = correctKeys + 1; //counts juiste toetsen aantal}} als (correctKeys == 6) //if de ingevoerde code overeenkomt met code een, nummer één afspelen {Serial.println ("Code vier Correct"); playcomplete("4.WAV"); succes = 1;} correctKeys = 0; juiste belangrijke teller instellen
voor (ik = 0; ik < 6; i ++) //Check Code vijf {als (enteredCode [i] == secretCodeFive[i]) {correctKeys = correctKeys + 1; //counts juiste toetsen aantal}} als (correctKeys == 6) //if de ingevoerde code overeenkomt met code een, nummer één afspelen {Serial.println ("Code vijf Correct"); playcomplete("5.WAV"); succes = 1;} correctKeys = 0; juiste belangrijke teller instellen
voor (ik = 0; ik < 6; i ++) //Check Code zes {als (enteredCode [i] == secretCodeSix[i]) {correctKeys = correctKeys + 1; //counts juiste toetsen aantal}} als (correctKeys == 6) //if de ingevoerde code overeenkomt met code een, nummer één afspelen {Serial.println ("Code zes juiste"); playcomplete("6.WAV"); succes = 1;} correctKeys = 0; juiste belangrijke teller instellen
if(success == 1) {Serial.println ("You Got een juiste Code"); succes = 0;} else {playcomplete("0.WAV"); Serial.println ("u mislukt"); } }
byte check_switches() {statische byte vorige [6] statische lange tijd [6] byte lezen; byte ingedrukt; byte index; gedrukt = 0;
voor (byte index = 0; index < 6; ++ index) {lezen = digitalRead (14 + index); als (lezen == LOW & & Vorige [index] == HIGH & & millis() - tijd [index] > DEBOUNCE) {/ / schakelaar ingedrukt tijd [index] = millis(); gedrukt = index + 1; breken;} vorige [index] = lezing;} / / terug schakelaar nummer (1-6) terugkeer (gedrukt); }
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(); }