Multi personlighet Fortune teller (8 / 12 steg)

Steg 8: Arduino skiss

Jag ville verkligen en spåkvinnan som skulle ha mer personlighet än genomsnittliga maskinen, så jag bestämde mig att jag skulle göra det så att användaren kan välja stämningen i spåkvinnan. I skissen, är wave-filer uppdelade i olika avdelningar. Måste du antingen namnge dina ljudfiler efter filnamn visas i skissen eller byta namn på namnen i skissen efter dina filer. Så till exempel heter normala öden 1-14 (fall 1-14). Sarkastisk öden heter 15s-29s (fall 15-29), så vidare och så vidare. När du laddar ditt SD-kort med ljudfiler, måste du byta namn på filerna därefter. Så om du skulle använda denna skiss som, för att göra en Beatles jukebox, skulle du behöva byta namn på Hey Jude "1" (det är 1, inte 1.wav).
Du behöver den våg skölden, Arduino och ett SD-kort. Du kommer också behöva installera biblioteket för WaveHC. Det finns instruktioner på Adafruit webbplats om hur man korrekt konvertera dina ljudfiler till rätt format för Wave sköld. Jag använde Audacity för detta, eftersom det finns massor av alternativ för att ändra ljudet av filer i Audacity, och eftersom jag inte riktigt ville spåkvinnan till ljud som mig.
Det finns bara några digitala stiften eftersom wave sköld behöver några av stiften att kommunicera med Arduino. I min skiss använde jag pins 6,7,8 och 9, samt analoga stift 5. Skissen använder buller från analoga stift 0 för ett mera slumpmässigt ljud urval. Mitt projekt använder två olika ljuskällor. I skissen är dessa leduvPin & ledstrobePin. Den använder också en PIN-kod för motorstyrning (pin 9) & en PIN-kod för springan (pin 8), märkt knappen i skissen. Potten är kopplad till analoga stift 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;

SdReader kort; Detta objekt innehåller information för kortet
FatVolume vol; Detta innehåller information för partitionen på kortet
FatReader rot. Detta innehåller information för filsystemet på kortet
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 MOTOR 9
#define knappen 8
#define LED 13

int val = 0;
int potvalue = 0;
lång randNum;

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()) återvända;
putstring ("\n\rSD I/O fel:");
Serial.Print(Card.ErrorCode(), HEX);
putstring (",");
Serial.println(Card.errorData(), HEX);
While(1);
}

void setup() {

Ställ in serieporten
Serial.BEGIN(9600);
pinMode (knapp, indata);
pinMode (LED, OUTPUT);
pinMode (leduvPin, produktionen);
pinMode (ledstrobePin, produktionen);
randomSeed(analogRead(0));
digitalWrite (knappen, hög);
pinMode (MOTOR, OUTPUT);

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 (2, utgång);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, 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 titta i
om (vol.init (kort, del))
bryta; 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ök ö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!
}

Usch! Vi fick tidigare de hårda delarna.
putstring_nl("ready!");

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

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

}

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

om (val == hög & & potvalue > = 0 & & potvalue < = 4)
{
randNum = random (1, 14);
Delay(1000);
växel (randNum)
{
fall 1:
Serial.println(1);
playcomplete("1.wav");
bryta;
fall 2:
Serial.println(2);
playcomplete("2.wav");
bryta;
fall 3:
Serial.println(3);
playcomplete("3.wav");
bryta;
fall 4:
Serial.println(4);
playcomplete("4.wav");
bryta;
fall 5:
Serial.println(5);
playcomplete("5.wav");
bryta;
fall 6:
Serial.println(6);
playcomplete("6.wav");
bryta;
fall 7:
Serial.println(7);
playcomplete("7.wav");
bryta;
mål 8:
Serial.println(8);
playcomplete("8.wav");
bryta;
mål 9:
Serial.println(9);
playcomplete("9.wav");
bryta;
mål 10:
Serial.println(10);
playcomplete("10.wav");
bryta;
mål 11:
Serial.println(11);
playcomplete("11.wav");
bryta;
ärende 12:
Serial.println(12);
playcomplete("12.wav");
bryta;
ärende 13:
Serial.println(13);
playcomplete("13.wav");
bryta;
fall 14:
Serial.println(14);
playcomplete("14.wav");
bryta;
standard:
bryta;
}
}

om (val == hög & & potvalue > = 5 & & potvalue < = 15)
{
randNum = random (15, 29);
Delay(1000);
växel (randNum)
{
mål 15:
Serial.println(15);
playcomplete ("15s. WAV");
bryta;
fall 16:
Serial.println(16);
playcomplete ("16s. WAV");
bryta;
fall 17:
Serial.println(17);
playcomplete ("17s. WAV");
bryta;
fall 18:
Serial.println(18);
playcomplete ("18s. WAV");
bryta;
fall 19:
Serial.println(19);
playcomplete ("19s. WAV");
bryta;
mål 20:
Serial.println(20);
playcomplete ("20s. WAV");
bryta;
mål 21:
Serial.println(21);
playcomplete ("21s. WAV");
bryta;
fall 22:
Serial.println(22);
playcomplete ("22s. WAV");
bryta;
fall 23:
Serial.println(23);
playcomplete ("23s. WAV");
bryta;
fall 24:
Serial.println(24);
playcomplete ("24s. WAV");
bryta;
fall 25:
Serial.println(25);
playcomplete "(25 år. WAV");
bryta;
fall 26:
Serial.println(26);
playcomplete ("26s. WAV");
bryta;
fall 27:
Serial.println(27);
playcomplete ("27s. WAV");
bryta;
fall 28:
Serial.println(28);
playcomplete ("28s. WAV");
bryta;
fall 29:
Serial.println(29);
playcomplete ("29s. WAV");
bryta;
standard:
bryta;
}
}

om (val == hög & & potvalue > = 16 & & potvalue < = 22)
{
randNum = random (30, 44);
Delay(1000);
växel (randNum)
{
fall 30:
Serial.println(30);
playcomplete ("30m. WAV");
bryta;
fall 31:
Serial.println(31);
playcomplete ("31m. WAV");
bryta;
fall 32:
Serial.println(32);
playcomplete ("32m. WAV");
bryta;
fall 33:
Serial.println(33);
playcomplete ("33m. WAV");
bryta;
fall 34:
Serial.println(34);
playcomplete ("34m. WAV");
bryta;
fall 35:
Serial.println(35);
playcomplete ("35m. WAV");
bryta;
fall 36:
Serial.println(36);
playcomplete ("36m. WAV");
bryta;
fall 37:
Serial.println(37);
playcomplete ("37m. WAV");
bryta;
fall 38:
Serial.println(38);
playcomplete ("38m. WAV");
bryta;
Case 39:
Serial.println(39);
playcomplete ("39m. WAV");
bryta;
fall 40:
Serial.println(40);
playcomplete ("40m. WAV");
bryta;
fallet 41:
Serial.println(41);
playcomplete ("41m. WAV");
bryta;
fall 42:
Serial.println(42);
playcomplete ("42m. WAV");
bryta;
fall 43:
Serial.println(43);
playcomplete ("43m. WAV");
bryta;
fall 44:
Serial.println(44);
playcomplete ("44m. WAV");
bryta;
standard:
bryta;
}
}

om (val == hög & & potvalue > = 23 & & potvalue < = 1023)
{
randNum = random (45, 60);
Delay(1000);
växel (randNum)
{
mål 45:
Serial.println(45);
playcomplete("45.wav");
bryta;
fall 46:
Serial.println(46);
playcomplete ("46e. WAV");
bryta;
fall 47:
Serial.println(47);
playcomplete ("47e. WAV");
bryta;
fall 48:
Serial.println(48);
playcomplete ("48e. WAV");
bryta;
fall 49:
Serial.println(49);
playcomplete ("49e. WAV");
bryta;
fall 50:
Serial.println(50);
playcomplete ("50e. WAV");
bryta;
fallet 51:
Serial.println(51);
playcomplete ("51e. WAV");
bryta;
fall 52:
Serial.println(52);
playcomplete ("52e. WAV");
bryta;
fall 53:
Serial.println(53);
playcomplete ("53e. WAV");
bryta;
fall 54:
Serial.println(54);
playcomplete ("54e. WAV");
bryta;
fall 55:
Serial.println(55);
playcomplete ("55e. WAV");
bryta;
fall 56:
Serial.println(56);
playcomplete ("56e. WAV");
bryta;
fall 57:
Serial.println(57);
playcomplete ("57e. WAV");
bryta;
fall 58:
Serial.println(58);
playcomplete ("58e. WAV");
bryta;
fall 59:
Serial.println(59);
playcomplete ("59e. WAV");
bryta;
fall 60:
Serial.println(60);
playcomplete ("60e. WAV");
bryta;
standard:
bryta;
}
}

}

Spelar en full fil från början till slut med ingen paus.
void playcomplete(char *name) {
Ring vår hjälpare för att hitta och spela detta namn
playfile(Name);
samtidigt (wave.isplaying) {
digitalWrite (MOTOR, hög);
blixt (20, delayPeriod);
digitalWrite (MOTOR, låg);
göra ingenting samtidigt dess spelar
}
dess gjort spelar nu
}
void flash (int numFlashes, int d)
{
för (int jag = 0; jag < numFlashes; jag ++)
{
digitalWrite (ledstrobePin, hög);
digitalWrite (leduvPin, låg);
fördröjning (d);
digitalWrite (ledstrobePin, låg);
digitalWrite (leduvPin, hög);
fördröjning (d);
digitalWrite (ledstrobePin, låg);
digitalWrite (leduvPin, låg);
}
}

void playfile(char *name) {
se om objektet våg för närvarande gör något
om (wave.isplaying) {
blixt (20, delayPeriod) spelar ;// redan något, så sluta det!
Wave.stop(); Sluta
}
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"); hemkomst.
}

OK dags att spela! starta uppspelningen
Wave.Play();
}

Se Steg
Relaterade Ämnen

Hur man gör en Fortune Teller

Detta är ett enkelt sätt att underhålla barnen att agerar upp eller ett sätt att hålla underhöll när du är uttråkad och inuti.Steg 1: Vad du behöver:En rektangulär pappersarkEn plan yta att arbeta påSax (valfritt)Steg 2:Ta din pappersark och vik hörn...

En alla hjärtans Fortune Teller-är de en för mig?

Hello!Jag kommer för att visa dig hur man gör en alla hjärtans Fortune Teller (Anton cacther) så du kan ta reda på om din hemliga kärlek älskar dig tillbaka!Detta är bara för skojs skull och kanske inte ger förutsägbara resultat!Njut och glad Alla hj...

Amelias Fortune Teller

dessa roliga papper leksaker gå av en mängd olika namn. Det här är Amelia förklarar hur hon gjorde sin Fortune Teller.Bra jobb Amelia!...

Vintage Coin-Op Arcade, Esmeralda Fortune Teller

Denna kostym var super kul att slitage... men utmanande att göra! Det skulle inte vara så svårt nu, efter att ha gått igenom processen en gång, men att de alla veta 24 åringar som vi är, vi kände att vi skulle vara helt bra väntar till sista minuten...

Fortune Teller monter

detta instructable är mer om att använda en viss typ av hårdvara än den övergripande bygget.Jag ska anta att du har en idé om hur man klippa och montera trä i en ram och att du vet hur man fäster plywood som ramar. Om inte, jag är säker det finns Ins...

Fru Karlsson skelett Fortune Teller

Fortune teller är till skillnad från de flesta fortune teller maskiner eftersom det kommer att förolämpa dig. När trick-or-treaters knacka på dörren, dras de alltid till skelett spåkvinnan. Jag ändra dispenseras förmögenheter och den förmögenhet Visa...

Lätt Fortune Teller blommor

Dessa cool och lätt blommor är bra för ganska mycket allt! Att ge som gåva eller dekorera för mittpunkten vid ett bord. Hur som helst är dessa blommor snabbt och enkelt.Steg 1: Vad behöver du?Allt du behöver för detta projekt är tre bitar av origamip...

Zolterno: En Animatronic, brand baserade Fortune Teller

nästan alla som har bott för tid förstår popkulturen referenser från Tom Hanks classic: stor. För att undvika mobbning, barn hittar en mystisk fortune teller ("Zoltar"), och vill växa upp. Mycket till sin förvåning blir hans önskan sann. Jag vil...

Göra ett hjärta av en Fortune Teller

Steg 1: Starta hjärtat Tuck i hörnen av fortune teller och veck. Sedan göra spåkvinnan platt och vänds detSteg 2: Utgör hjärtat Ta två hörnen diagonalt från varandra och nyp dem ihop.Steg 3: Utgör hjärtat Sedan trycka dem tillsammansSteg 4: Utgör hjä...

Origami lilla arrangör/Fortune Teller

Hej! LambyAngel är här! Idag ska jag visa dig hur man gör en origami arrangör/fortune teller. Låt oss komma igång!Steg 1: material Så för denna origami skapelse behöver du:1) origami papper (eller papper, du kan bara klippa det)2) sax (för styckning...

Hur man gör ett papper Fortune Teller - Video instruktioner

hur man gör ett papper Fortune Teller - Video instruktioner...

DIY Fortune Teller

detta är en riktigt enkel, lätt hantverk för alla. Du kan göra det på språng, i ditt hus, eller lång flygplan Rider Rider/bil. Det är kul eftersom det finns många varianter för faktiska öden och du har att utöva lite fantasi, men låt oss komma igång...

Hur man gör ett papper Fortune Teller - av Ultimate handledning

Hej alla, Välkommen till slutlig Tutorials! Idag ska vi visa dig hur man gör ett papper forune teller som du kan se i skolan. Så först någon unge gör en papper fortune teller och du vill ha en så dålig men du inte vill be dem att göra dig en och ser...

Hur man gör en Viva Fortune Teller i 7 enkla steg!

Steg 1: Få Viva Få en bit av viva eller pappershandduk men viva fungerar bättreSteg 2: skär Sätta i triangel och skära av extra (pekas) bort.Steg 3: Gör Fortune Teller 1. ta ställning och vika dem till mitten 2. Vänds och vik försiktigt!!! 3. Vik på...

Old Skool kul från förr i tiden: Origami Fortune Teller

så mycket förändringar från en tid av våra liv till nästa. Jag tror ingenting gör mig mer nostalgisk än att göra en av dessa små saker från gymnasiet under mina vuxna år. Ett exempel är att skriva en anteckning till min älskling och ge det till honom...

Psychic Fortune Teller - en automat som läser hos Twitter

Läskiga nöjesfält attraktion och Twitter App!Den psykiska kupan-Mind Fortune Teller är en nöjesplatsen arcade-typ attraktion som kan berätta för din förmögenhet. Ännu bättre än det dock - är det också en webb-anslutna Twitter program som kan skörda t...

Arduino Powered Fortune Teller

Jag skapade denna roliga Instructable att visa dig hur man gör en helt anpassningsbara Digital Fortune Teller. När knappen trycks, får du en random förmögenhet. Detta är allt roligt i förmögenheter, utan att behöva äta alla cookies! Njuta av.Leverans...

Arduino Fortune Teller

detta projekt ger användaren en förmögenhet och lucky number liknande från en lyckokaka. Detta gjordes som en julklapp.Steg 1: Steg 1 Löd rubriken pins på LCD. Löda sladdar till kvinnliga huvud stift och hookup till Arduino. Här använde vi den LCD-4...

Hur man gör en knep fortune teller

detta är hur man gör en knep spåkvinnan som du kan välja om du vill ge en dålig förmögenhet eller en lycka.Du behöver:PapperSkriftligen verktygSteg 1: vikning Vik hörnen till centrum, vända på papperet, då Vik hörnen till centrum igen.Efter det, vik...