IMP-ERSONATOR: Elektriska Imp + Arduino + Wave Shield = avlägsna ljud fil spelare (3 / 7 steg)

Steg 3: Ladda upp koden till Arduino



The Arduino koden är en mashup av ett grundläggande elektriska Imp exempel och knappar exemplet för Wave Shield.
Du behöver ett bibliotek som kallas WaveHC för Wave Shield som du kommer att stöta på när du följer den Ladyada handledningen.

Första är att inrätta en seriell anslutning med den elektriska Imp så att alla signaler kan användas.
Koden behandlar sedan en signal som tas emot på en Imp stift som om det vore en knapp trycks. Detta orsakar i sin tur en ljudfil ska spelas från SD-kortet via våg sköld biblioteket.

Kopiera koden nedan och klistra in den i Arduino IDE och ladda upp den till styrelsen:

/*
Här koden ställer in en seriell anslutning till en elektrisk Imp och utlösare ljudfiler som ska spelas från ett SD-kort när en signal tas emot från den integrerade havspolitiken.
Det är i grunden en mashup av våg sköld knappar exempel och elektriska imp grundläggande arduino exempel
Stift:
8,9 för imp
Stift 13, 12 och 11 används för att tala med SD-kortet och kan inte ändras.
Resten av stiften, men är mer flexibel.
2 -> LCS
3 -> CLK
4 -> DI
5 -> LAT
10 -> CCS
0 = onwayhome.wav
6 = friday.wav
7 = tea.wav
*/

Du behöver WaveHC biblioteket
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"
#include < SoftwareSerial.h >
Konfigurera en seriell conncetion för Imp
SoftwareSerial impSerial (8, 9); RX på 8, TX den 9

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 DÄMPNINGSTID 5 / / knappen debouncer

här är där vi definiera "knappar" som vi ska använda - i detta fall de är anslutna till stift på den elektriska Imp
byte knappar [] = {6,0,7}.
Denna behändiga makro låter oss att avgöra hur stor matrisen upp ovan är, genom att kontrollera storleken
#define NUMBUTTONS sizeof(buttons)
Vi kommer att följa upp om en knapp trycks bara, bara släppt eller "tryckte" (nuvarande staten)
flyktiga byte tryckte [NUMBUTTONS], justpressed [NUMBUTTONS], justreleased [NUMBUTTONS];

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() {
byte i.

Ställ in serieporten
Serial.BEGIN(19200);
putstring_nl ("WaveHC med");
Serial.Print (NUMBUTTONS, DEC);
putstring_nl("buttons");

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);
ställa in datahastigheten för SoftwareSerial port
impSerial.begin(19200);

Gör ingång & aktiverar pull-up motstånd på switch pins
för (jag = 0; jag < NUMBUTTONS; i ++) {
pinMode (knapparna [i], ingång);
digitalWrite (knappar [i], hög);
}

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;

}

SIGNAL(TIMER2_OVF_vect) {
check_switches();
}

void check_switches()
{
statiska byte previousstate [NUMBUTTONS];
statiska byte currentstate [NUMBUTTONS];
byte index.

för (index = 0; index < NUMBUTTONS; index ++) {
CurrentState [index] = digitalRead(buttons[index]); Läs på-knappen

/*
Serial.Print (index, DEC).
Serial.Print (": cstate =");
Serial.Print (currentstate [index], DEC);
Serial.Print (", pstate =");
Serial.Print (previousstate [index], DEC);
Serial.Print (", tryck =");
*/

om (currentstate [index] == previousstate[index]) {
om ((tryckte [index] == låg) & & (currentstate [index] == låg)) {
bara tryckte
justpressed [index] = 1;
}
annars om ((tryckte [index] == hög) & & (currentstate [index] == hög)) {
precis släppt
justreleased [index] = 1;
}
tryckte [index] =! currentstate [index]; kom ihåg att digital hög betyder inte intryckt
}
Serial.println (pressad [index], DEC);
previousstate [index] = currentstate [index]; hålla en kör stämmer av knappar
}
}

void loop() {
Skicka data från mjukvaran följetong
om (impSerial.available())
Serial.write(impSerial.Read()); maskinvaran följetong
Skicka data från maskinvaran följetong
om (Serial.available())
impSerial.write(Serial.read()); till programvaran följetong

byte i.

om (justpressed[0]) {
justpressed [0] = 0;
Serial.println ("stift 6 utlöste");
playcomplete("Home.wav");
}

om (justpressed[1]) {
justpressed [1] = 0;
Serial.println ("stift 0 utlöste");
playcomplete("Friday.wav");
}
om (justpressed[2]) {
justpressed [2] = 0;
Serial.println ("stift 7 utlöste");
playcomplete("Tea.wav");
}
/*
om (justpressed[3]) {
justpressed [3] = 0;
playcomplete ("din Song.wav");
}
om (justpressed[4]) {
justpressed [4] = 0;
playcomplete ("din Song.wav");
}
om (justpressed[5]) {
justpressed [5] = 0;
playcomplete ("din Song.wav");
}
*/
}

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

Remote Home Automation exempel - Arduino + Ethernet Shield

Välkommen igen!I detta Instructable jag kommer detalj hur man använder olika sensorer och objekt med en internet ansluten Arduino. Enligt min åsikt, detta var ett mycket roligt projekt att sätta ihop och mixtra med! Plus, jag måste bättra på min HTML...

Hur du använder Arduino ISP Shield 2,0

kolla min kickstarter kampanj för den nya modellen! Förvandla vårt arduino till en ISP programmerare att bränna boot-lastare och ladda upp koden till Attiny85, Attiny84, Atmega328, Atmega1624, Attiny4313...Hur man bränner BootloaderFör att ladda upp...

Arduino Ethernet Shield handledning

The Arduino Ethernet Shield kan du enkelt ansluta din Arduino till internet. Denna sköld gör din Arduino skicka och ta emot data från var som helst i världen med en internet-anslutning. Du kan använda den att göra roliga saker som styra robotar från...

TouchOSC och Arduino Ethernet Shield till kontroll energi (A.M.P.A.E.)

Dag efter dag, människor använder en stor mängd prylar och slösa en massa energi att ha ingen oro om det. Vår idé är i grunden en mobil applikation för tabletter och smartphones som erbjuder användaren en total kontroll av alla energikällor som använ...

Styra Denon AVR med Arduino + Ethernet shield

Med detta projekt har jag bygger en enkel kontrollpanel för min Denon AVR (AVR-X4100W).De flesta av Denon A / V-mottagare är nätverket redo, så att du kan styra dem inom en web interphasen eller en app. Det finns inga officiella dokumentation för HTT...

Styra WeMo Switch med Arduino + Ethernet shield

Det finns många apps som låter dig styra din Belkin WeMo enheter, men det finns ingen en hårdvara switch panel som den Nyans knacka för Philips nyans.Så bygga jag en med en Arduino!Steg 1: materialFör detta projekt behöver du:En Arduino ombord. Jag a...

Kom hem! Anslutning avlägsna utrymmen lätt över Web

Besök blinkblinkstem.com för fler projekt som detta!Du kan tro att vi lever i en tid där du kan röra ett objekt (alla objekt - om den har metall på det) och ett ljus tänds i din älskade-ens space - även om de bor i en annan stad, stat eller land!? Du...

Aerodynamik effekt på avlägsna experiment

Aerodynamik påverkar de avlägsna rest av ett objekt. Här är ett enkelt EXPERIMENT att lösa detta problem.Mål: Aerodynamik påverkar de avlägsna rest av ett objekt.Manipulerade variabel: Paper plane används.Konstant variabel: Startpunkt och styrka bruk...

Nerf Retaliator Mod: Luft strypningen avlägsnas och tunnan förlängningen

Vill ha lite mer * bang * för pengarna? Kolla in denna detaljerade Instructable på luft strypningen avlägsnas och tunnan förlängningen för ett bra sätt att förnya din Retaliator Nerf blaster. Att ta bort luft strypningen ökar kraften och omfattningen...

Skydd från stormen: avlägsna termometern bostäder

jag inte mycket vård för kommer utanför att ta reda på hur kallt eller varmt det är. Det är inte bra mig kräver tid och temperatur och telefonnumret heller, eftersom jag bor 30 miles från staden och på högre höjd. Med detta i åtanke plockade jag upp...

Arduino Solar Shield - en DIY solar källa för dina projekt utan att vänta på PCB

detta instructable är en grundläggande version av Bley Joel ("det är klockan nio på en lördag, regelbundna publiken blandar i) Solar Shield, och det bör fungera för de flesta arduinos. Jag har testat det med Sparkfun's Arduino Pro och den nya Leonard...

Arduino tb.shield (3 axel timelapse motion control)

Jag älskar timelapse fotografi.För två år sedan, driven av en god vän till mig bestämde jag mig för att ge det ett försök på timelapse fotografering. Jag hade en DSLR-kamera men hade inte en Intervalltimer, så jag monterade en liten elektronisk krets...

Elektrisk enhjuling Arduino DIY

Detta är en billig elektrisk arduino själv balansera unicykle. Total kostnad är cirka 360 dollar, och du får en räckvidd på 10-15KM. Enhjuling fungerar som en Segway bara med ett hjul.Steg 1: Steg 1. Delar För att göra det du behöver:Jag har köpt all...

Smarta hem med Arduino Ethernet shield och Teleduino (med web app)

Detta projekt är en enkel lösning för dem som vill ha en smart-home system men inte har en stor budget och för lat de som inte vill komma från sängen till släcker belysningen av eller på.Det är också projektera av en high school student för sitt slut...

Arduino Mini-Shields

Detta är en uppsättning av enkel, liten formfaktor, mini-sköldar som jag skapade nästan av en slump. När jag gjorde mer och mer av dem, insåg jag att de kan vara riktigt användbara. Det som började som ett sätt att använda vissa reservdelar, förvandl...

Skydda din elektriska motorer (Arduino Soft Starter)

När en elektrisk motor startar kan sin nuvarande nå upp till 7 gånger dess operation aktuell. Det betyder att dess interna komponenter kan vara skadat och livscykel kommer att minska och också kan orsaka oväntade fel innan dess planerade underhåll. E...

Online grafer med ingenting men en Arduino, Ethernet Shield och Sensor

Slutligen har jag beslutat att lägga några av mina befintliga projekt på instructables. Här är anpassade från mitt Super Graphing Data Logger projekt.Vad är Super Graphing Data Logger (SGDL)? Det är en Arduino projekt som integrerar dataloggning och...

ARDUINO WAV BOOMBOX...

HElloo guyz,,, någonsin velat göra en egen semi bärbara bergsprängare att spela upp mp3 filer från ditt sd-kort via arduino... Väl kan du faktiskt spela låtar direkt från din mobil, men vad om du vilja mer loudness och kontroll över din musik... Det...

Programmerbara elektriska vehicle(Arduino+TAMIYA)

kombinera TAMIYA BULLDOZER och arduino, kan du bygga en programmerbara elbil.Steg 1: Bygga upp TAMIYA BULLDOZER KIT Steg 2: DC Motor H-Bridge förare ombord Steg 3: Ansluta och programvara Programvara:Motorn är design för 3V makt.Detta projekt med ett...