IMP-ERSONATOR: Arduino, elektrische Imp + Wave Shield = externe Sound File Player (3 / 7 stap)

Stap 3: De code uploaden naar de Arduino


The Arduino-code is een mashup van het voorbeeld van de knoppen voor de Wave Shield en een eenvoudig voorbeeld van de elektrische Imp.
U moet een bibliotheek genaamd WaveHC voor de Wave Shield die u tegenkomen zult wanneer u volgen naar de opvoeden Ladyada.

Het eerste ding is een seriële verbinding met de elektrische Imp instellen zodat elke ontvangen signalen kunnen worden gebruikt.
De code behandelt dan een signaal ontvangen op één van de pinnen van de Imp, alsof het een knop wordt ingedrukt. Dit veroorzaakt op zijn beurt een geluidsbestand moet worden afgespeeld vanaf de SD-kaart via de Wave Shield-bibliotheek.

Kopieer de onderstaande code en plak deze in de Arduino IDE en deze uploaden naar de Raad van bestuur:

/*
Deze code stelt een seriële verbinding met een elektrische Imp en triggers geluidsbestanden van een SD-kaart worden afgespeeld wanneer een signaal wordt ontvangen van het GMB.
Het is eigenlijk een mashup van de wave shield knoppen voorbeeld en het voorbeeld van de elementaire arduino elektrische imp
Pinnen:
8,9 voor GMB
Pin 13, 12 en 11 worden gebruikt om te praten met de SD-kaart en kunnen niet worden gewijzigd.
De rest van de pinnen, zijn echter meer flexibel.
2 -> LCS
3 -> CLK
4 -> DI
5 -> LAT
10 -> CCS
0 = onwayhome.wav
6 = friday.wav
7 = tea.wav
*/

Moet u de WaveHC bibliotheek
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"
#include < SoftwareSerial.h >
een seriële conncetion ingesteld voor het GMB
SoftwareSerial impSerial (8, 9); RX op 8, TX op 9

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 DEBOUNCE 5 / / button debouncer

Hier is waar we de "knoppen" die we zullen gebruiken - in dit geval zijn ze aangesloten op pinnen op de elektrische Imp definiëren
byte knoppen [] = {6,0,7};
Deze handige macro laat ons bepalen hoe groot de array van boven is, door de grootte controleren
#define NUMBUTTONS sizeof(buttons)
Wij zullen volgen als een knop is gewoon ingedrukt, gewoon vrijgegeven, of 'ingedrukt' (de huidige staat)
vluchtige byte ingedrukt [NUMBUTTONS], justpressed [NUMBUTTONS], justreleased [NUMBUTTONS];

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 {}
byte i;

seriële poort instellen
Serial.begin(19200);
putstring_nl ("WaveHC met");
Serial.Print (NUMBUTTONS, DEC);
putstring_nl("buttons");

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);
Stel de gegevenssnelheid voor de SoftwareSerial-poort
impSerial.begin(19200);

Maak input & pull-up weerstanden op schakelaar pinnen inschakelen
voor (ik = 0; ik < NUMBUTTONS; i ++) {}
pinMode (knoppen [i], INPUT);
digitalWrite (knoppen [i], hoge);
}

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;

}

Signal(TIMER2_OVF_vect) {}
check_switches();
}

VOID check_switches()
{
statische byte previousstate [NUMBUTTONS];
statische byte currentStatus [NUMBUTTONS];
byte index;

voor (index = 0; index < NUMBUTTONS; index ++) {}
currentStatus [index] = digitalRead(buttons[index]);   Lees de knop

/*
Serial.Print (index, DEC);
Serial.Print (": cstate =");
Serial.Print (currentStatus [index], DEC);
Serial.Print (", pstate =");
Serial.Print (previousstate [index], DEC);
Serial.Print (", druk op =");
*/

Als (currentStatus [index] == previousstate[index]) {}
Als ((gedrukt [index] == laag) & & (currentStatus [index] == LOW)) {}
gewoon ingedrukt
justpressed [index] = 1;
}
anders als ((gedrukt [index] == HIGH) & & (currentStatus [index] == HIGH)) {}
net vrijgegeven
justreleased [index] = 1;
}
ingedrukt [index] =! currentStatus [index];  Vergeet niet, digitaal hoge middel niet ingedrukt
}
Serial.println (gedrukt [index], DEC);
previousstate [index] = currentStatus [index];   houden van een lopende telling van de knoppen
}
}

void loop {}
Gegevens verzenden vanuit de software seriële
Als (impSerial.available())
Serial.write(impSerial.Read());  de seriële hardware
Gegevens verzenden vanuit de hardware serial
Als (Serial.available())
impSerial.write(Serial.read());  de seriële software

byte i;

Als (justpressed[0]) {}
justpressed [0] = 0;
Serial.println ("pin 6 geactiveerd");
playcomplete("Home.wav");
}

Als (justpressed[1]) {}
justpressed [1] = 0;
Serial.println ("pin 0 geactiveerd");
playcomplete("Friday.wav");
}
Als (justpressed[2]) {}
justpressed [2] = 0;
Serial.println ("pin 7 geactiveerd");
playcomplete("Tea.wav");
}
/*
Als (justpressed[3]) {}
justpressed [3] = 0;
playcomplete ("uw Song.wav");
}
Als (justpressed[4]) {}
justpressed [4] = 0;
playcomplete ("uw Song.wav");
}
Als (justpressed[5]) {}
justpressed [5] = 0;
playcomplete ("uw Song.wav");
}
*/
}

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();
}

Gerelateerde Artikelen

Lees E-mail met Arduino en Wave Shield

Lees E-mail met Arduino en Wave Shield

als onderdeel van mijn project hier (dat project is in een wedstrijd dus als je dit dan stemmen voor!) dat gebruikt een Arduino te onderbreken van een extrernal geluidsbron (dwz iPod) als u wilt u laten weten over dingen om je heen gebeurt, ik had he
Arduino Throttle Body synchronisatie Shield

Arduino Throttle Body synchronisatie Shield

Een veelvoorkomende motorfiets onderhoudstaak is het synchroniseren van de organen van de gashendel op de motor vloeiend uit die een ruw idle. Dit wordt gedaan door het vacuüm op elke gasklephuis toezicht en met behulp van de stationair schroef te ma
Zeer eenvoudige Arduino elektrische Lock

Zeer eenvoudige Arduino elektrische Lock

dit is een instructable voor een zeer eenvoudige Arduino elektrische lock gecontroleerde.Het belangrijkste idee is hier is heel eenvoudig als dit meer van een proof of concept prototype soort ding was.De Arduino wordt gebruikt als schakelaar voor con
Arduino tijd & Temp Display Shield

Arduino tijd & Temp Display Shield

een ander project ik ben bezig met vereist een goede timer, maar hoe meer ik lees over Arduino, besefte ik dat ik kon het niet maken van een accurate timer met behulp van een Arduino die al was gewijd aan andere taken. De Arduino zal altijd tijd verl
Arduino seismische Activiteitenmonitor - Ethernet-Shield

Arduino seismische Activiteitenmonitor - Ethernet-Shield

heb je ooit wilde indruk op je vrienden door te zeggen iets gek als, "Ik denk dat er binnenkort een aardbeving" momenten voordat een aardbeving hits?Of wilt u gewoon een waarschuwing, een paar seconden dat uw leven kan redden.Dit project kan je
Het gebruik van MQTT in Arduino zonder een Ethernet-Shield

Het gebruik van MQTT in Arduino zonder een Ethernet-Shield

MQTT staat voor MQ telemetrie vervoer. Het is een publiceren/abonneren,zeer eenvoudige en lichtgewicht messaging protocol, ontworpen voor beperkte apparaten en lage bandbreedte, lange wachttijd of onbetrouwbare netwerken. De ontwerpprincipes zijn te
Arduino naai gemakkelijk Wearable Shield

Arduino naai gemakkelijk Wearable Shield

Wearable computing, e-textiel, zachte circuits of wat je wilt noemen, is een groeiende gebied van de technologie toepassen op kleding of accessoires zoals tassen, schoenen of rugzakken.  Het is een leuke en creatieve uitdaging die verder gaat dan all
DIY Arduino motor en Wireless Shield

DIY Arduino motor en Wireless Shield

ooit wilde maken van een arduino-schild in dit instructable is uw gids voor het maken van een schild met twee functies en het is een goedkoper alternatief voor echte. Dit schild werkt op IC-l278 en Hc 05 gecombineerd. Dit schild kan worden gebruikt v
Arduino Nano met Ethernet-Shield

Arduino Nano met Ethernet-Shield

Ik kocht onlangs een Arduino Ethernet-shield voor de Arduino Uno ontworpen, en dacht dat ik kon net gemakkelijk sluit deze dan aan mijn bestaande Arduino Nano. Ik had het mis!Ik kon niet vinden veel informatie helemaal over hoe dit te doen, behalve d
Arduino SDcard eenvoudige Wav speler 2

Arduino SDcard eenvoudige Wav speler 2

Eerder introduceerden we "Arduino eenvoudige Wav speler", die eigenlijk niet de naam "wav player" verdient omdat het niet flexibel is helemaal voor de beperking van Arduino flash. Deze tutorial en set van kits, vormt een aanvulling op
TinyISP-Attiny25/45/85 programmering van Arduino UNO R3 compatibel Shield

TinyISP-Attiny25/45/85 programmering van Arduino UNO R3 compatibel Shield

Vermoeid van altijd aansluiten van de jumper draden aan op uw Attiny Program?Hoe over het maken van een Easy aan programma Shield voor Arduino aan programma uw op tiny!Daarmee zullen we kunnen programma onze op tiny25/45/85 gemakkelijk door gewoon uw
Arduino Internet (zonder Wifi Shield)

Arduino Internet (zonder Wifi Shield)

In dit instructable ik ga u laten zien hoe je arduino verbinding met het internet, er zijn vele manieren om dit te doen. Men gebruik maken van een Ethernet-shield, maar haar vast en niet erg convinent te gebruiken, op de tweede is het wellicht de bes
Snel en gemakkelijk Arduino compatibel H-brug Shield

Snel en gemakkelijk Arduino compatibel H-brug Shield

In dit instructable ik zal in detail te beschrijven hoe ik ging over het maken van een snel en gemakkelijk, Arduino compatibel, H-brug schild. Maar eerst, een korte intro in wat kreeg me gemotiveerd om het te maken.Een paar jaar geleden, begon ik mee
Spelen met een Arduino audio geluidsbestanden (wav)

Spelen met een Arduino audio geluidsbestanden (wav)

Afspelen van wav bestand Audio van uw Audino SD-kaart.Dit Instructable zal u tonen hoe een wav-bestand op je SdCard kan worden afgespeeld via een eenvoudige schakeling aan een spreker.Het wav-bestand moet 8 bits mono. Ik heb geen probleem 44 KHz-best