Multi persoonlijkheid waarzegster (8 / 12 stap)

Stap 8: de Arduino schets

Ik wilde eigenlijk een waarzegster die meer persoonlijkheid dan de gemiddelde machine, hebben zou dus heb ik besloten dat ik kunnen zijn zou zodat de gebruiker kan de sfeer van de waarzegster selecteren. In de sketch, zijn de wave-bestanden opgedeeld in verschillende secties. Moet u de namen in de schets na uw bestanden hernoemen of naam uw geluidsbestanden niet groter nadat de bestandsnamen in de tekening weergegeven. Dus bijvoorbeeld, zijn de normale fortuinen 1-14 (geval 1-14) genoemd. De sarcastische fortuinen heten 15s-29 's (geval 15-29), enzovoort & enzovoort. Wanneer u uw SD-kaart met geluidsbestanden laadt, moet u de naam van uw bestanden dienovereenkomstig wijzigen. Dus als u ging deze schets zoals is, zodat een Beatles-jukebox gebruiken, zou u moeten hernoemen Hey Jude "1" (dat is 1, niet 1.wav).
Hier moet u het schild van de Golf, de Arduino en een SD-kaart. Ook moet u de bibliotheek voor WaveHC te installeren. Er zijn instructies op de website van Adafruit over hoe goed uw audiobestanden te converteren naar de juiste indeling voor de Wave shield. Ik gebruikte Audacity voor dit, omdat er tal van opties zijn voor het wijzigen van het geluid van de bestanden in Audacity, en ook omdat ik echt niet de waarzegster te klinken wilde zoals mij.
Er zijn slechts een paar digitale pinnen beschikbaar, omdat de wave shield moet enkele van de pinnen om te communiceren met de Arduino. In mijn schets gebruikte ik pinnen 6,7,8, & 9, evenals analoge pin 5. De schets lawaai van analoge pin 0 voor een meer willekeurige audio selectie gebruikt. Mijn project maakt gebruik van twee verschillende lichtbronnen. In de sketch zijn dit leduvPin & ledstrobePin. Het gebruikt ook een pincode voor motorische controle (pin 9) & een pin voor de betaalautomaat (pin 8), met het label van de knop in de schets. De pot is aangesloten op de analoge pin 5.

#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"
int ledstrobePin = 7;
int leduvPin = 6;
int delayPeriod = 20;

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

#define MOTOR 9
#define knop 8
#define LED 13

int val = 0;
int potvalue = 0;
lange randNum;

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 {}

seriële poort instellen
Serial.begin(9600);
pinMode (knop, INPUT);
pinMode (LED, uitvoer);
pinMode (leduvPin, OUTPUT);
pinMode (ledstrobePin, OUTPUT);
randomSeed(analogRead(0));
digitalWrite (knop, hoge);
pinMode (MOTOR, uitvoer);

putstring ("vrije RAM:");       Dit kan helpen met het opsporen van fouten, uit RAM lopend is slecht
Serial.println(freeRam());      Als dit onder 150 bytes kan het problemen magie!

De pennen voor de DAC-besturingselement instellen Deze pennen zijn gedefinieerd in de bibliotheek
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, 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 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!");

/ * TCCR2A = 0;
TCCR2B = 1 << CS22 | 1 << CS21 | 1 << CS20;

Timer2 Overflow Interrupt Enable
TIMSK2 | = 1 << TOIE2;
*/

}

void loop
{
Val = digitalRead(BUTTON);
potvalue = analogRead(5);
Serial.println (potvalue, DEC);

Als (val == HIGH & & potvalue > = 0 & & potvalue < = 4)
{
randNum = willekeurige (1, 14);
delay(1000);
schakelaar (randNum)
{
Case 1:
Serial.println(1);
playcomplete("1.wav");
breken;
Case 2:
Serial.println(2);
playcomplete("2.wav");
breken;
Case 3:
Serial.println(3);
playcomplete("3.wav");
breken;
Case 4:
Serial.println(4);
playcomplete("4.wav");
breken;
Case 5:
Serial.println(5);
playcomplete("5.wav");
breken;
Case 6:
Serial.println(6);
playcomplete("6.wav");
breken;
Case 7:
Serial.println(7);
playcomplete("7.wav");
breken;
zaak 8:
Serial.println(8);
playcomplete("8.wav");
breken;
Case 9:
Serial.println(9);
playcomplete("9.wav");
breken;
zaak 10:
Serial.println(10);
playcomplete("10.wav");
breken;
zaak 11:
Serial.println(11);
playcomplete("11.wav");
breken;
zaak 12:
Serial.println(12);
playcomplete("12.wav");
breken;
zaak 13:
Serial.println(13);
playcomplete("13.wav");
breken;
geval 14:
Serial.println(14);
playcomplete("14.wav");
breken;
standaard:
breken;
}
}

Als (val == HIGH & & potvalue > = 5 & & potvalue < = 15)
{
randNum = willekeurige (15, 29);
delay(1000);
schakelaar (randNum)
{
Case 15:
Serial.println(15);
playcomplete ("15s. WAV");
breken;
case 16:
Serial.println(16);
playcomplete ("16s. WAV");
breken;
koffer 17:
Serial.println(17);
playcomplete ("17s. WAV");
breken;
Case 18:
Serial.println(18);
playcomplete ("18s. WAV");
breken;
Case 19:
Serial.println(19);
playcomplete ("19s. WAV");
breken;
Case 20:
Serial.println(20);
playcomplete ("20s. WAV");
breken;
Case 21:
Serial.println(21);
playcomplete ("21s. WAV");
breken;
Case 22:
Serial.println(22);
playcomplete ("22s. WAV");
breken;
Case 23:
Serial.println(23);
playcomplete ("23s. WAV");
breken;
Case 24:
Serial.println(24);
playcomplete ("24s. WAV");
breken;
Case 25:
Serial.println(25);
playcomplete ("25s. WAV");
breken;
Case 26:
Serial.println(26);
playcomplete ("26s. WAV");
breken;
Case 27:
Serial.println(27);
playcomplete ("27s. WAV");
breken;
Case 28:
Serial.println(28);
playcomplete ("28s. WAV");
breken;
Case 29:
Serial.println(29);
playcomplete "(29 's. WAV");
breken;
standaard:
breken;
}
}

Als (val == HIGH & & potvalue > = 16 & & potvalue < = 22)
{
randNum = willekeurige (30, 44);
delay(1000);
schakelaar (randNum)
{
Case 30:
Serial.println(30);
playcomplete ("30m. WAV");
breken;
Case 31:
Serial.println(31);
playcomplete ("31m. WAV");
breken;
Case 32:
Serial.println(32);
playcomplete ("32m. WAV");
breken;
Case 33:
Serial.println(33);
playcomplete ("33m. WAV");
breken;
Case 34:
Serial.println(34);
playcomplete ("34m. WAV");
breken;
Case 35:
Serial.println(35);
playcomplete ("35m. WAV");
breken;
Case 36:
Serial.println(36);
playcomplete ("36m. WAV");
breken;
case 37:
Serial.println(37);
playcomplete ("37m. WAV");
breken;
Case 38:
Serial.println(38);
playcomplete ("38m. WAV");
breken;
Case 39:
Serial.println(39);
playcomplete ("39m. WAV");
breken;
case 40:
Serial.println(40);
playcomplete ("40m. WAV");
breken;
Case 41:
Serial.println(41);
playcomplete ("41m. WAV");
breken;
Case 42:
Serial.println(42);
playcomplete ("42m. WAV");
breken;
Case 43:
Serial.println(43);
playcomplete ("43m. WAV");
breken;
case 44:
Serial.println(44);
playcomplete ("44m. WAV");
breken;
standaard:
breken;
}
}

Als (val == HIGH & & potvalue > = 23 & & potvalue < = 1023)
{
randNum = willekeurige (45, 60);
delay(1000);
schakelaar (randNum)
{
Case 45:
Serial.println(45);
playcomplete("45.wav");
breken;
Case 46:
Serial.println(46);
playcomplete ("46e. WAV");
breken;
Case 47:
Serial.println(47);
playcomplete ("47e. WAV");
breken;
Case 48:
Serial.println(48);
playcomplete ("48e. WAV");
breken;
Case 49:
Serial.println(49);
playcomplete ("49e. WAV");
breken;
Case 50:
Serial.println(50);
playcomplete ("50e. WAV");
breken;
Case 51:
Serial.println(51);
playcomplete ("51e. WAV");
breken;
Case 52:
Serial.println(52);
playcomplete ("52e. WAV");
breken;
Case 53:
Serial.println(53);
playcomplete ("53e. WAV");
breken;
Case 54:
Serial.println(54);
playcomplete ("54e. WAV");
breken;
Case 55:
Serial.println(55);
playcomplete ("55e. WAV");
breken;
Case 56:
Serial.println(56);
playcomplete ("56e. WAV");
breken;
Case 57:
Serial.println(57);
playcomplete ("57e. WAV");
breken;
Case 58:
Serial.println(58);
playcomplete ("58e. WAV");
breken;
Case 59:
Serial.println(59);
playcomplete ("59e. WAV");
breken;
Case 60:
Serial.println(60);
playcomplete ("60e. WAV");
breken;
standaard:
breken;
}
}

}

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) {}
digitalWrite (MOTOR, hoge);
Flash (20, delayPeriod);
digitalWrite (MOTOR, laag);
niets te doen tijdens het spelen van haar
}
nu zijn gedaan afspelen
}
VOID flitser (int numFlashes, int d)
{
for (int i = 0; ik < numFlashes; ik ++)
{
digitalWrite (ledstrobePin, hoge);
digitalWrite (leduvPin, laag);
vertraging (d);
digitalWrite (ledstrobePin, laag);
digitalWrite (leduvPin, hoge);
vertraging (d);
digitalWrite (ledstrobePin, laag);
digitalWrite (leduvPin, laag);
}
}

ongeldig playfile(char *name) {}
Zie als de Golf-object is momenteel bezig met iets
Als (wave.isplaying) {}
Flash (20, delayPeriod) ;// 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();
}

Gerelateerde Artikelen

Multi Cade aangedreven door Raspberry Pi

Multi Cade aangedreven door Raspberry Pi

Herbeleef uw jeugd dagen, of nieuwe degenen met dit leuk om te maken van de arcade kast aangedreven door de raspberry pi ervaring. Deze gids zal u tonen enkele van de basisprincipes arcade creatie en ingaan op het proces nam ik naar mijne bouwen.Stap
Multi-Functional Star Wars Astromech Droid

Multi-Functional Star Wars Astromech Droid

E4-B4Astromech droid voor het huis.Video links voor mobiele apparaten die de videominiaturen bovenstaande animatie wordt niet afgespeeld:Het maken van E4-B4 Astromech Droid VideoE4-B4: Showcase Video, deel 1E4-B4: Rocket Man VideoE4-B4: Zin in een dr
360 graden Multi Purpose fel LED licht

360 graden Multi Purpose fel LED licht

HalloDit is zeer nuttig 360 graden multi purpose fel LED licht. Als de naam zelf vindt u de details van deze lamp...360 graden betekent deze lamp verlicht het licht in alle richtingen.Multi purpose betekent dat deze lamp kan worden gebruikt als tafel
Een goedkoop alternatief van multi tool – kleine zakje van weggegooid binnenband

Een goedkoop alternatief van multi tool – kleine zakje van weggegooid binnenband

Wanneer u voor een rit, met name voor een lange gaat, is het super belangrijk om met u een multi tool in het geval dat u wilt aanpassen van uw remmen, reparatie van flats enz. Iedereen weet dat.In mijn ervaring zijn de situaties waarvoor sommige basi
Basis multi modulair Frames voor lading fietsen - stapelbaar waterdichte Lasergesneden dozen

Basis multi modulair Frames voor lading fietsen - stapelbaar waterdichte Lasergesneden dozen

De fundamentele multi modulaire frames voor lading fietsen is de eerste bouwsteen in onze open sourceplatform Vélo M², een ecosysteem waar wij de elektriciteit door zonne-energie & pedaal macht en de plannen om te bouwen modules om uw verbeelding die
4 Allures te halen multi oppervlak LED Throwies - Taggies

4 Allures te halen multi oppervlak LED Throwies - Taggies

Hallo iedereen,Vandaag ben ik de publicatie van mijn 20e Instructable & YouTube video! Om dit te doen heb ik besloten om de rol van 4 Mini-projecten in een en hoop dat u zult bevalt.De inspiratie voor dit project kwam uit de zogenaamde "throwies&
Schieten voor een functie van de Homepage: Timelapse en multi-blootstelling Fotografie DIY-Hoe (maken of uw eigen code schrijven!)

Schieten voor een functie van de Homepage: Timelapse en multi-blootstelling Fotografie DIY-Hoe (maken of uw eigen code schrijven!)

Wat ik leuk vindt aan Instructables is het foto-centric: het eerste wat je ziet bij het maken van een nieuwe Instructable is "Voeg afbeeldingen", voordat een tekstvermelding dialoogvenster verschijnt! Foto's zijn in de wereld waarin die we vanda
Multi-zintuiglijke Virtual Reality ervaring

Multi-zintuiglijke Virtual Reality ervaring

Met behulp van Morton Heilig van 1957 uitvinding, "Sensorama," als een bron voor inspiratie, heb ik een DIY virtual reality platform ontwikkeld.Met de mogelijkheid voor de 360 graden van exploratie, misschien het lijkt vreemd om ontwerp rond een
Multi zaad mond Freshener & spijsvertering (Mukhwas)

Multi zaad mond Freshener & spijsvertering (Mukhwas)

Multi zaad mond Freshener & spijsvertering hulp (Mukhwas) is een kleurrijke Indiase na maaltijd snack of digestief steun. Het wordt meestal gegeten na een maaltijd spijsverteringte frissen de mond. Er zijn verschillende verscheidenheden van mond verf
Veelzijdige multi-shot pneumatische kanon

Veelzijdige multi-shot pneumatische kanon

een van de grote nadelen van maken en het functioneren van een pneumatische kanon is de behoefte aan een nieuwe lading van de lucht voor elk schot. Deze behoefte aan re drukregeling van iemands kanon kan echt eten veel tijd in beslag en snijd in de p
Awesome multi Petal bloem

Awesome multi Petal bloem

leren hoe te maken van deze geweldige multi Petal bloem!  Een handige accessoire voor corsages, broches, fascinators, hoofdbanden, enz.Bekijk deze stap voor stap methode!
Multi Color garens verven - rood & blauw maakt...

Multi Color garens verven - rood & blauw maakt...

Multi Color garens verven - rood & blauw maakt...Deel 1 van mijn Fiber-To-Dye-For-serie!Download deze gratis Tutorial!Er zijn zo veel verschillende leuke technieken te verven garen die ik wil proberen, dus ik dacht Nou, waarom niet delen! Hier is een
2 leidde Multi licht Hack.

2 leidde Multi licht Hack.

100 yen winkels zijn een soort korting op te slaan die verkopen een breed scala van producten.Dit correspondeert met ongeveer één Amerikaanse dollar.Ik zoek het materiaal van het werk hier.Ik gehackt 2 LED multi licht dat werd gevonden in de winkel v
Rubber Band Gun multi-shot

Rubber Band Gun multi-shot

Mijn zelfgemaakte rubber band gun van ijslollys die multi-shot kan leveren.Stap 1: Detail gidsen Laatste keer maakte ik een Instructables op hoe maak je een speelgoed pistool met click-clack geluid bij het afspelen van:.Nu, ik besefte dat dit een mul