Förstärkt Hyper-Reality handske (5 / 8 steg)
Steg 5: Arduino, träffa Wave sköld.
Ledsen, jag avvika.
Här är vad vi kommer inte att visa dig: tre timmar av LÖDNING! Vad är bra med Lady Ada och hennes härliga produkter är att de är billiga och de har riktigt bra instruktioner! Plus, damen, håller kostnaderna nere genom att inte samla styrelser och i sin tur du lära dig att löda som en robot! Vad suger, sökvägen till lödning som en robot är akin promenad Dante tog med Vergilius.
Inte vara skerd! Lödning är en stor skicklighet!
Nästa sak att göra är att följa "Använda det" tutorial på WAVE SKÖLDEN att lära sig hur man... uh... använda den. Detta innebär användning av SD-kort FORMATTER och kort, att få filerna på kortet och får koden! Vår kod är postat nedan. DETTA KRÄVER EN HEL DEL NYA ARDUINO ANVÄNDARE! Inte bli avskräckta om det inte går smidigt. Det inte för oss heller.
KOD: Nedan här, kopiera och klistra in din Arduino IDE.
#include "FatReader.h"
#include "SdReader.h"
#include
#include "WaveUtil.h"
#include "WaveHC.h"
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 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 namnen (prettyprinting)
dir_t dirBuf; buffert för katalog läsningar
void setUsUpTheCard(void) {
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!
}
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!
}
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 ("filer som hittas:");
dirLevel = 0;
Skriva ut alla filer i alla kataloger.
lsR(root);
}
/*
* lista rekursivt - möjligt stackspill om underkataloger för kapslade
*/
void lsR (FatReader & d)
{
int8_t r; Anger nivån av rekursion
medan ((r = d.readDir(dirBuf)) > 0) {/ / läsa nästa fil i katalogen
hoppa över subdirs. och...
om (dirBuf.name[0] == ".")
fortsätta;
för (uint8_t jag = 0; jag < dirLevel; i ++)
Serial.Print(' '); Detta är för prettyprinting, sätta utrymmen framför
printName(dirBuf); skriva ut namnet på den fil som vi bara finns
Serial.println(); och en ny rad
om (DIR_IS_SUBDIR(dirBuf)) {/ / vi kommer recurse på någon direcory
FatReader s; göra ett nya katalogobjekt för informationen
dirLevel += 2. strecksatsen 2 utrymmen för framtida utskrifter
om (s.open (vol, dirBuf))
lsR(s); lista alla filer i denna katalog nu!
dirLevel-=2; ta bort extra indraget
}
}
sdErrorCheck(); gör vi OK?
}
/*
* Skriv ut dir_t namnfältet. Utdata är 8.3-format, så som ljud. WAV eller filnamn. DAT
*/
void printName (dir_t & dir)
{
för (uint8_t jag = 0; jag < 11; i ++) {/ / 8.3-format har 8 + 3 = 11 bokstäver i det
om (dir.name[i] == "")
fortsätta; Skriv inte ut några mellanslag i namnet
om (jag == 8)
Serial.Print('.'); efter den 8: e bokstaven, placera en punkt
Serial.Print(dir.name[i]); skriva ut den n: te siffran
}
om (DIR_IS_SUBDIR(dir))
Serial.Print('/'); kataloger get a / i slutet
}
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();
}
void sdErrorCheck(void)
{
om (! card.errorCode()) återvända;
putstring ("SD i/o-fel:");
Serial.Print(Card.ErrorCode(), HEX);
putstring (",");
Serial.println(Card.errorData(), HEX);
While(1);
}
/*************************************
* DETTA ÄR BRA GREJER ***
*************************************/
int tilt_port = 13. Digital port tilt sensorn är på
int tilt_original; har början position av tilt sensor
faux accelerometer åtgärder
void setup() {
Serial.BEGIN(9600);
pinMode (tilt_port, ingång);
int tilt_original = digitalRead(tilt_port);
setUsUpTheCard(); initiera Wave sköld
}
int tumme = 0;
int pekaren = 0;
int mitten = 0;
int ring = 0;
int pinky = 0;
int tilt_waiting = 0;
int tilt_inmotion = 0;
int hoprullade = 0;
int curled_previous = 0;
void loop() {
int tumme = analogRead(A4);
int pekaren = analogRead(A3);
int mitten = analogRead(A2);
int ring = analogRead(A1);
int pinky = analogRead(A0);
hoprullade = 0;
/*
* tummen verkar vara b0rked
* slumpmässigt (?) pinnar på 0
* så låt oss strunta i det
*/
om (tumme > 120) {
ringlad += 1;
}
om (pekaren > 150) {
ringlad += 10.
}
/*
* långfingret är till synes alltid på
* så låt oss strunta i det
*/
om (mellersta > 130) {
ringlad += 100.
}
om (ring > 170) {
ringlad += 1000;
}
om (pinky > 120) {
ringlad += 10000;
}
om (hoprullade > = 11100) {
tilt_check ("PUNCH", "PUNCH. WAV");
} annat {
tilt_check ("GUN", "GUN. WAV");
}
/*
om (hoprullade == 0) {
Karate CHOP!
tilt_check ("hacka", "CHOP. WAV");
} else om (hoprullade == 1000 + 10000) {
GUN
tilt_check ("GUN", "GUN. WAV");
} else om (hoprullade == 9999) {
SPIIIIIDEY-MAN
tilt_check ("Spider", "SPIDEY. WAV");
} else om (hoprullade == 10 + 1000 + 10000) {
KNYTNÄVE
tilt_check ("PUNCH", "PUNCH. WAV");
}
*/
Serial.Print ("tumme:"); Serial.println(thumb);
Serial.Print ("pekaren:"); Serial.println(Pointer);
Serial.Print ("mellersta:"); Serial.println(Middle);
Serial.Print ("ring:"); Serial.println(Ring);
Serial.Print ("pinky:"); Serial.println(Pinky);
Serial.Print ("hoprullade:"); Serial.println(curled);
Serial.println("");
Delay(15);
}
void reset_check (int återställa = 0) {
om (Återställ || hoprullade! = curled_previous) {
tilt_waiting = 0;
tilt_inmotion = 0;
curled_previous = hoprullade;
}
}
void tilt_check (String budskap, char * filnamn) {
reset_check();
int tilt = digitalRead(tilt_port);
Serial.println(Tilt);
om (! tilt_waiting) {
tilt_waiting = 1;
tilt_original = tilt;
} annat {
om (luta! = tilt_original) {
tilt_inmotion = 1;
}
om (tilt_inmotion & & luta == tilt_original) {
Serial.println(Message);
Serial.println(filename);
playcomplete(filename);
reset_check(1);
}
}
}