Arduino personliga Soundtrack Hoodie (5 / 6 steg)

Steg 5: kod

Huvuddelen av koden är för WaveShield, baserat på http://www.ladyada.net/make/waveshield/
Det finns flera flera knappen exempel runt - jag använde en mash-up baserad på Rayshobby blogg http://rayshobby.net/?p=16 med lite av detta en, kastat i.
Slumpmässigt urval kod för den sista knappen är anpassad från 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; Höger arm knappar på analoga stift 0
int buttonValueR = 0;
int buttonPinL = 1; Vänster arm knappar på Analog pinne 1
int buttonValueL = 0;

lång randChoose = 0; Initiera slumpmässiga element
lång randNumber;

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

int wasplaying = 0;
int rVal;

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()
{
Serial.BEGIN(9600);
Serial.println ("Wave test!");
pinMode (2, utgång);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (13, OUTPUT);

randomSeed (analogRead (1)); setup slumpgenerator

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!");

}
Knappar kalibreras med en 10K resistor på 5v stift med ett 9v batteri anslutet till Arduino kontakten.
Använd värden från din analoga Läs skiss till fäste värdet som tilldelats varje knapp. Din kan variera från de tilldelade här.

Höger arm knappar på stift 0

void loop() {
buttonValueR = analogRead(buttonPinR);
om (buttonValueR > 645 & & buttonValueR < 660) {
playcomplete ("R1. WAV");
}
Delay(25); Det är alltid bra att långsamma saker ner lite när man läser ingångar

om (buttonValueR > 225 & & buttonValueR < 240) {
playcomplete ("R2. WAV");
}

Delay(25);

om (buttonValueR > 165 & & buttonValueR < 185) {
playcomplete ("R3. WAV");
}

Delay(25);

om (buttonValueR > 325 & & buttonValueR < 345) {
playcomplete ("R4. WAV");
}

Delay(25);

om (buttonValueR > 495 & & buttonValueR < 515) {
playcomplete ("R5. WAV");
}

Vänster arm knappar på stift 1

buttonValueL = analogRead(buttonPinL);
om (buttonValueL > 645 & & buttonValueL < 660) {
playcomplete ("L1. WAV");
}
Delay(25);

om (buttonValueL > 225 & & buttonValueL < 245) {
playcomplete ("L2. WAV");
}

Delay(25);

om (buttonValueL > 165 & & buttonValueL < 185) {
playcomplete ("L3. WAV");
}

Delay(25);

om (buttonValueL > 325 & & buttonValueL < 350) {
playcomplete ("L4. WAV");
}

Delay(25);

Randomize ljud påverkar spelade när du trycker på den sista knappen på vänster arm

om (buttonValueL > 495 & & buttonValueL < 515) {
randChoose = random (1, 20); generera ett val mellan 1 och 20
växel (randChoose)
{
fall 1:
playcomplete ("RAND1. WAV");
bryta;
fall 2:
playcomplete ("RAND2. WAV");
bryta;
fall 3:
playcomplete ("RAND3. WAV");
bryta;
fall 4:
playcomplete ("RAND4. WAV");
bryta;
fall 5:
playcomplete ("RAND5. WAV");
bryta;
fall 6:
playcomplete ("RAND6. WAV");
bryta;
fall 7:
playcomplete ("RAND7. WAV");
bryta;
mål 8:
playcomplete ("RAND8. WAV");
bryta;
mål 9:
playcomplete ("RAND9. WAV");
bryta;
mål 10:
playcomplete ("RAND10. WAV");
bryta;
mål 11:
playcomplete ("RAND11. WAV");
bryta;
ärende 12:
playcomplete ("RAND12. WAV");
bryta;
ärende 13:
playcomplete ("RAND13. WAV");
bryta;
fall 14:
playcomplete ("RAND14. WAV");
bryta;
mål 15:
playcomplete ("RAND15. WAV");
bryta;
fall 16:
playcomplete ("RAND16. WAV");
bryta;
fall 17:
playcomplete ("RAND17. WAV");
bryta;
fall 18:
playcomplete ("RAND18. WAV");
bryta;
fall 19:
playcomplete ("RAND19. WAV");
bryta;
mål 20:
playcomplete ("RAND20. WAV");
bryta;
}
Delay(25);

}
}

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) {
göra ingenting samtidigt dess spelar
}
dess gjort spelar nu
}

void playfile(char *name) {
se om objektet våg för närvarande gör något
om (wave.isplaying) {/ / redan spelar 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

Speaker Tee: A Reality [Beta]

%%%%%%%%%%%%%%%%%%%Så aprilskämt har kommit och gått och ThinkGeeks dåraktiga linje av produkter har gett alla ett gott skratt. Men en av produkterna som slog mig som något helt möjligt och cool. Det var Personliga Soundtrack T-Shirt, så jag beslöt a...

Silent Annoyatron

du kanske tror att en tyst version av Thinkgeek's Annoyatron skulle vara meningslöst. Men du skulle vara fel, eftersom det är faktiskt ett helt nytt sätt att föra psykologisk krigföring på din officemates. Bara ansluta den till datorns mikrofon eller...

Arduino LilyPad anka dynastin Hoodie med ljud och LED ljus

gjorde jag en anka dynastin tema hoodie med en LilyPad Arduino som har 3 dragkedja trycksensorn kopplar till aktivera 3 olika åtgärder/program på baksidan av hoodie. Dragkedjan är nyckeln till att aktivera dessa växlar så när dragkedjan är rörande en...

Personliga Black Box - Arduino Mega + ultimata GPS Shield + LSM303

personliga svart låda med:-Arduino Mega 2560- Ultimate GPS datalogger sköld- Triple-axlig Accelerometer + Magnetometer (LSM303)Efter att ha upplevt många svårigheter med gps skölden med en Arduino Uno, lärde jag mig snart jag maxing ut funktionerna i...

Personlig assistent med Telegram & Arduino.

Hej gott folk!För några månader sedan hörde jag om ett projekt som använde en instant messenger bot för att skapa ett system som automatiskt skulle behandla och ordna pizza beställningar av kunder via Whats app. Jag var som... wow! Ge att människan e...

Smart personliga termometer med Arduino

Detta instructable förbereds som en del av våra uppdrag för TfCD (teknik för Concept Design) kurs vid TU Delft. Följande instructable är utarbetad av:Bo Koperdraat: 4209567Karthik Torbjörn: 4501578I detta instructable du lära dig att snabbt bygga en...

Personliga Arduino frågesport

Denna Arduino frågesport är den kala elektronik som behövs för att göra en awesome, bärbara frågesport! I detta Instructable lär dig hur tråd upp denna fantastiska utbildningsprojekt. Ingen låda ingår, eftersom jag vill att du ska tänka på en cool in...

Personlig säkerhetssystem genom att använda Arduino

Här är bara en enkel guide om hur du skapar din egen mini "security system" med en Arduino. Detta är bara ett roligt projekt, vänligen faktiskt lita inte på den här enheten att hålla ditt hus säkert! Denna design använder en Arduino, en HC-SRO4...

Personlig väderstation arduino hebreiska

הרעיון בפרויקט gratuitement הוא ליצור שילוב pris נתוני מזג אוויר המגיעים מלוח ארדוינו הנמצא בבית, ומהאינטרנט, ולאפשר למשתמש הן חיווי הנובע מהנתונים והן ביצוע פעולות פשוטות כמו הדלקה וכיבוי pris Architectural מקומית (או כל מכשיר אחר המחובר לשקע הנשלט...

Hur du ansluter en Android-telefon direkt till en Arduino (USB OTG) (Via en personlig massör)

IntroduktionDetta projekt kommer till dig genom Comingle.io, öppen källkod sexleksakföretag. Vi lanserar en helt ny crowdfunding kampanj athttp://igg.me/at/mod för att finansiera massproduktion av en ny fullt hackable dildo. Det kan du ansluta någon...

Kloka klockan 3 - Arduino-baserad nördiga väckarklocka

Wise klockan 3 är en öppen källkod, mycket hackable nördiga klocka som visar mycket mer än tiden. Dess huvudsakliga funktion är att visa användare redigerbara citat Hämtad från ett SD-kort (som de används i Fotokameror).Wise klockan 3 kan dessutom Vi...

Den ultimata nördiga personliga presenten - gör ett korsstygn QR kod

jag gjorde detta som en present till min syster i jul. QR-kod, när skannas på en smartphone, leder till en video på YouTube - ett bildspel av barndom jul bilder.Det tog inte alltför lång tid att göra och hon älskade det, som det var något lite mer pe...

Bultande hjärta godis skål med Arduino

Jag ville göra en godis skål för Bus eller godis som såg ut som en spooky hjärta slog under godis. Jag hoppas att de yngre barnen tycker det är skrämmande och inte alltför skrämmande. Jag är säker att tonåringar med ingen kostym och örngott inte blir...

3 x 3 LED Cube programmering tips (Arduino baserat)

hur man gör att cube gör vad du vill ha den till!Jag följde de instructable här och byggde en 3 x 3 LED cube drivs av en Arduino. Jag blev glad! Men det kunde endast göra en rutin. Igen och igen och igen och igen och igen... Så jag bestämde mig att f...

Arduino robotarm

i detta instructurable jag kommer att visa dig hur man gör en enkel robotarm som kontrolleras av 4 servon, 2 analoga styrspakar och en Arduino UNO. Det är mycket lik min "2 servon + Thumbstick" instructurable. Denna handledning är framför allt a...

Hjul Hoodie

Ja, du läste rätt. Det är ett hjul hoodie. Bära detta på Halloween. Bär detta att en lastbil rally. Använd detta om du råkar vara en kall, fashionabla mekaniker. Denna djärva unisex hoodie skriker fashion renegade. Dess ' också något att göra med de...

En Guide till Raspberry Pi Arduino kommunikation i inbyggda system

Det här är en guide till olika metoder för kommunikation mellan Raspberry Pi och Arduino. Denna guide är skapad av allt jag lärt mig från inrättandet av en kapacitet skog. Inlägget av projektet kan ses, en video av projektet kan ses här, och dokument...

Android kontrollerade ljus och kraft, pfodDevice för Arduino

Uppdatering: Se Android/Arduino för nybörjare - Design anpassade Android menyer att slå Arduino utgångar på och av. Absolut No programmering krävs för ett alternativ som inte kräver någon programmering alls.===========================================...

Interaktiva led lampa | Tensegrity struktur + arduino

Detta stycke är en rörelse-lyhörd lampa. Utformad som en minimal tensegrity skulptur, ändrar lampan konfigurationen av färger som svar på orientering och förflyttning av hela strukturen.Med andra ord, beroende på dess orientering visar lampan en viss...