C3PO Droid konstruktion (42 / 43 steg)
Steg 42: Arduino Uno R3
Arduino Uno R3 läser en 4 siffrig binära värdet från Arduino Mega 2560 och spelar en ljudfil som associeras med det binära värdet. Detta är en röst för C3PO droid. Hänvisa till elritningar hookup information.
John Guarnero
September 2014
#include
#include
#include
#include
int inp6 = 0;
int inp7 = 0;
int inp8 = 0;
int inp9 = 0;
int TC_Value = 8;
int Last_TC = 0;
int Demonstration_Value = 0;
int Last_Demonstration_Value = 1;
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
uint8_t dirLevel; indrag för fil/dir namn
dir_t dirBuf; buffert för katalog läsningar
/*
* Definiera makro för att få felmeddelanden i flash-minne
*/
#define error(msg) error_P(PSTR(msg))
Fungerar definitioner (vi definierar dem här, men koden är nedan)
void spela (FatReader & dir);
SETUP
void setup() {
Serial.BEGIN(9600); Ställ in följetong bibliotek på 9600 bps för felsökning
putstring_nl ("\nWave test!"); säga vi vaknade!
putstring ("fri slå ned:"); Detta kan hjälpa till med felsökning, slut RAM är dålig
Serial.println(FreeRam());
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!)
fel ("kort init. misslyckades!"); Något gick fel, kan skriva ut varför
}
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, så ut
}
om (del == 5) {/ / om vi slutade inte att hitta en :(
fel ("ingen giltig FAT-partition!"); Säga vad som gick fel
}
Kan tala om för användaren om vad som hände
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)) {
fel kan inte ("öppna rotfästa dir!"); Något gick fel,
}
//
putstring_nl ("hittade filer (* = fragmenterad):");
Skriva ut alla filer i alla kataloger.
root.ls(LS_R | LS_FLAG_FRAGMENTED);
}
HJÄLPARE
/*
* skriva ut felmeddelande och stoppa
*/
void error_P (const char * str) {
PgmPrint ("fel:");
SerialPrint_P(str);
sdErrorCheck();
While(1);
}
void sdErrorCheck(void) {
om (! card.errorCode()) återvända;
PgmPrint ("\r\nSD I/O fel:");
Serial.Print(Card.ErrorCode(), HEX);
PgmPrint (",");
Serial.println(Card.errorData(), HEX);
While(1);
}
Början av Loop
void loop()
{
byte i.
inp6 = digitalRead(6); Binär 1
inp7 = digitalRead(7); Binära 2
inp8 = digitalRead(8); Binära 4
inp9 = digitalRead(9); Binär 8
om (inp6 == hög & & inp7 == låg & & inp8 == låg & & inp9 == låg) / / 1 2 4 8
{//Happy födelsedag Emily
Serial.println("1");
TC_Value = 1;
playcomplete("1.wav");
fördröjning (1).
}
om (inp6 == låg & & inp7 == hög & & inp8 == låg & & inp9 == låg) / / 1 2 4 8
{//Happy födelsedag Kim
Serial.println("2");
TC_Value = 2;
playcomplete("2.wav");
fördröjning (1).
}
om (inp6 == hög & & inp7 == hög & & inp8 == låg & & inp9 == låg) / / 1 2 4 8
{//Happy födelsedag Megan
Serial.println("3");
TC_Value = 3;
playcomplete("3.wav");
fördröjning (1).
}
om (inp6 == låg & & inp7 == låg & & inp8 == hög & & inp9 == låg) / / 1 2 4 8
{//Welcome till Guarnero hus
Serial.println("4");
TC_Value = 4;
playcomplete("4.wav");
fördröjning (1).
}
om (inp6 == hög & & inp7 == låg & & inp8 == hög & & inp9 == låg) / / 1 2 4 8
{//Happy Halloween
Serial.println("5");
TC_Value = 5;
playcomplete("5.wav");
fördröjning (1).
}
om (inp6 == låg & & inp7 == hög & & inp8 == hög & & inp9 == låg) / / 1 2 4 8
{//Happy-årsjubileum
Serial.println("6");
TC_Value = 6;
playcomplete("6.wav");
fördröjning (1).
}
om (inp6 == hög & & inp7 == hög & & inp8 == hög & & inp9 == låg) / / 1 2 4 8
{//Say några skämt
Serial.println("7");
TC_Value = 7.
playcomplete("7.wav");
fördröjning (1).
}
om (inp6 == låg & & inp7 == låg & & inp8 == låg & & inp9 == hög) / / 1 2 4 8
{//Kim Saint dialogrutan & Kim R2D2 dialogrutan
Serial.println("8");
TC_Value = 8;
playcomplete("8.wav");
fördröjning (1).
}
om (inp6 == hög & & inp7 == låg & & inp8 == låg & & inp9 == hög) / / 1 2 4 8
{//Happy Thanksgiving
Serial.println("9");
TC_Value = 9;
playcomplete("9.wav");
fördröjning (1).
}
om (inp6 == låg & & inp7 == hög & & inp8 == låg & & inp9 == hög) / / 1 2 4 8
{//Kims bullar dialogrutan
Serial.println("10");
TC_Value = 10;
playcomplete("10.wav");
fördröjning (1).
}
om (inp6 == hög & & inp7 == hög & & inp8 == låg & & inp9 == hög) / / 1 2 4 8
{//Master John & Lost In Space
Serial.println("11");
TC_Value = 11;
playcomplete("11.wav");
fördröjning (1).
}
om (inp6 == låg & & inp7 == låg & & inp8 == hög & & inp9 == hög) / / 1 2 4 8
{//Merry jul
Serial.println("12");
TC_Value = 12;
playcomplete("12.wav");
fördröjning (1).
}
Last_TC = TC_Value;
Serial.println(Last_TC);
//
}
Slutet av loop
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 ljud spelar
}
Ljud är gjort spelar
}
void playfile(char *name) {
se om objektet våg för närvarande gör något
om (wave.isplaying) {/ / ljud redan spelar så stoppa 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();
}