Stap 5: Code
Het grootste deel van de code is voor de WaveShield, gebaseerd op http://www.ladyada.net/make/waveshield/Er zijn verschillende voorbeelden van de multi knop rond - ik gebruikte een mash-up op basis van Rayshobby blog http://rayshobby.net/?p=16 met een beetje van dit één, in gegooid.
Willekeurige selectie code voor de laatste knop is aangepast van www.arduino.cc/en/Tutorial/Blink & www.arduino.cc/en/Reference/Random.
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"
int buttonPinR = 0; Rechterarm knoppen op analoge pin 0
int buttonValueR = 0;
int buttonPinL = 1; Linker arm knoppen op analoge pin 1
int buttonValueL = 0;
lange randChoose = 0; Initialiseren van willekeurige element
lange randNumber;
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 gegevens voor het bestandssysteem op de kaart
F FatReader; 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
int wasplaying = 0;
int rVal;
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);
}
else {}
FREE_MEMORY = ((int) & free_memory)-((int) __brkval);
}
Return free_memory;
}
VOID sdErrorCheck(void)
{
Als (! card.errorCode()) keren;
putstring ("\n\rSD I/O fout:");
Serial.Print(Card.ErrorCode(), HEX);
putstring (",");
Serial.println(Card.errorData(), HEX);
while(1);
}
VOID Setup
{
Serial.begin(9600);
Serial.println ("Wave test!");
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (13, OUTPUT);
randomSeed (analogRead (1)); Setup random getal-generator
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 ondervindt
card.partialBlockRead(true);
Nu gaan we voor een FAT-partitie!
uint8_t deel;
voor (deel = 0; deel < 5; deel ++) {/ / Wij hebben maximaal 5 "slots" om in te kijken
Als (vol.init (kaart, deel))
breken; We vonden een, laat borgtocht
}
Als (deel == 5) {/ / als we uiteindelijk niet het vinden van een :(
putstring_nl ("geen geldige FAT-partitie!");
sdErrorCheck(); Er ging iets mis, 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!");
}
Knoppen gekalibreerd met een 10K Ohm weerstand op de 5v pin met een 9v batterij aangesloten op de stekker van de Arduino.
Gebruik de waarden van uw analoge Lees schets aan de beugel van de waarde die aan elke knop is toegewezen. Jou kan variëren van degene die hier zijn toegewezen.
Rechterarm knoppen op pin 0
void loop {}
buttonValueR = analogRead(buttonPinR);
Als (buttonValueR > 645 & & buttonValueR < 660) {}
playcomplete ("R1. WAV");
}
delay(25); Het is altijd goed om langzaam dingen neer een beetje bij het lezen van ingangen
Als (buttonValueR > 225 & & buttonValueR < 240) {}
playcomplete ("R2. WAV");
}
delay(25);
Als (buttonValueR > 165 & & buttonValueR < 185) {}
playcomplete ("R3. WAV");
}
delay(25);
Als (buttonValueR > 325 & & buttonValueR < 345) {}
playcomplete ("R4. WAV");
}
delay(25);
Als (buttonValueR > 495 & & buttonValueR < 515) {}
playcomplete ("R5. WAV");
}
Linker arm knoppen op pin 1
buttonValueL = analogRead(buttonPinL);
Als (buttonValueL > 645 & & buttonValueL < 660) {}
playcomplete ("L1. WAV");
}
delay(25);
Als (buttonValueL > 225 & & buttonValueL < 245) {}
playcomplete ("L2. WAV");
}
delay(25);
Als (buttonValueL > 165 & & buttonValueL < 185) {}
playcomplete ("L3. WAV");
}
delay(25);
Als (buttonValueL > 325 & & buttonValueL < 350) {}
playcomplete ("L4. WAV");
}
delay(25);
Het geluid effect afgespeeld wanneer de laatste toets op de linker arm randomize
Als (buttonValueL > 495 & & buttonValueL < 515) {}
randChoose = willekeurige (1, 20); genereren van een keuze tussen 1 en 20
schakelaar (randChoose)
{
Case 1:
playcomplete ("RAND1. WAV");
breken;
Case 2:
playcomplete ("RAND2. WAV");
breken;
Case 3:
playcomplete ("RAND3. WAV");
breken;
Case 4:
playcomplete ("RAND4. WAV");
breken;
Case 5:
playcomplete ("RAND5. WAV");
breken;
Case 6:
playcomplete ("RAND6. WAV");
breken;
Case 7:
playcomplete ("RAND7. WAV");
breken;
zaak 8:
playcomplete ("RAND8. WAV");
breken;
Case 9:
playcomplete ("RAND9. WAV");
breken;
zaak 10:
playcomplete ("RAND10. WAV");
breken;
zaak 11:
playcomplete ("RAND11. WAV");
breken;
zaak 12:
playcomplete ("RAND12. WAV");
breken;
zaak 13:
playcomplete ("RAND13. WAV");
breken;
geval 14:
playcomplete ("RAND14. WAV");
breken;
Case 15:
playcomplete ("RAND15. WAV");
breken;
case 16:
playcomplete ("RAND16. WAV");
breken;
koffer 17:
playcomplete ("RAND17. WAV");
breken;
Case 18:
playcomplete ("RAND18. WAV");
breken;
Case 19:
playcomplete ("RAND19. WAV");
breken;
Case 20:
playcomplete ("RAND20. WAV");
breken;
}
delay(25);
}
}
Speelt een volledige bestand van begin tot eind met geen pauze.
ongeldig playcomplete(char *name) {}
Bel onze helper vinden en spelen deze naam
playfile(name);
terwijl (wave.isplaying) {}
niets te doen tijdens het spelen van haar
}
nu zijn gedaan afspelen
}
ongeldig playfile(char *name) {}
Zie als de Golf-object is momenteel bezig met iets
Als (wave.isplaying) {/ / al het spelen van iets, dus stoppen met het!
Wave.stop(); Stop ermee
}
kijken in de root directory en open het bestand
Als (! f.open (root, naam)) {}
putstring kon niet ("open bestand"); Serial.Print(name); terugkeer;
}
OK lees 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 het afspelen
Wave.Play();
}