Dit is niet een volledige Instructable, aangezien ik niet de juiste foto's langs de weg te nemen maar ik hoop te maken een andere één van deze (hopelijk beter) en beter op dat moment zal vastleggen.
Ik zag de volgende Instructable door guidomax: (met dank guidomax!!!) en met een collectie van roterende telefoons/delen, ik wilde om te zien wat ik kon doen met hen.
Ik besluit dat ik zou proberen te maken van de telefoon van de vleermuis met het signaal en presenteren als een geschenk aan mijn dochter voor de feestdagen.
Hier is een korte video van het werkend. De muziek is veel harder in persoon.
mijn stappen:
1. eerst verwees ik naar de bovenstaande Instructable te zien of ik van de werking van de interface krijgen kon en zoals voorgesteld in de Instructable, was het vrij gemakkelijk om dit te doen.
2. Ik nam een oude telefoon lichaam en primer en geschilderde rode spuiten. Ik heb ook de handset en het snoer.
3. Ik heb de code van de Arduino te spelen het thema van Batman en produceren een vleermuis signaal wanneer gezocht "B", "A", "T", "M", "A", "N" is gekozen op de telefoon.
De code was alleen het nemen van de code van guidomax en modifing het dus in plaats van een seriële uitgang op de computer, controleerde het enkel voor de goede reeks cijfers wordt gekozen. BATMAN is voor exanple "228626". Toen de Arduino zag deze tekenreeks, het begon het lied en de vleermuis signaal ingeschakeld.
Het lied: Ik had een schild van Adafruit Wave die ik had nooit gebruikt en zag dit als een kans om het te controleren. Het duurde een goede dag voor mij om het te bouwen (het komt als een kit) en dan is er een procedure die moet worden gevolgd om uw wav-bestand op het schild. Het is een gemakkelijke procedure als u iTunes gebruikt. Gewoon kopen het liedje en converteren zoals vereist via de iTunes-menu's en sleep naar het schild. Zonder iTunes het is meer betrokken, maar de pagina Adafruit begeleidt u doorheen.
De vleermuis signaal: Verscheidene andere Instructables laten zien hoe een signaal en ik nam wat ik van hen kon maar het was min of meer vallen en opstaan voordat ik kwam met het idee van het einde. Ik een fles water over in tweeën gesneden en zette een klein gaatje in de schroefdop. Ik heb een rode LED ingevoegd in het kleine gat. Ik schilderde de kroonkurk zwart. Als u de afbeelding niet redelijk goed, moest ik een kleine vleermuis symbool gesneden en voeg het tegenover de fles. Dat werkte, maar ik denk dat er moet een netter manier. Ik heet gelijmd de fles een opening maakte ik in de achterkant van de telefoon (hete lijm is geweldig!!).
De code: mijn oorspronkelijke idee was om verschillende super helden worden in de code. dwz als u Batman gekozen, heb je de themamuziek en het signaal, als u SUPERMAN gekozen, heb je verschillende muziek, etc. Zo ziet u wat code die er is voor dat doel, maar ik heb dat nooit ver. Het is gewoon BATMAN.
Batmanv2 #include < FatReader.h > Kaart van de SdReader; Dit object bevat de gegevens voor de kaart WaveHC Golf; Dit is de enige Golf (audio) object, omdat we zullen slechts één filter tegelijk spelen #define DEBOUNCE 100 / / button debouncer --van V1--- constanten int dialHasFinishedRotatingAfterMs = 100; tekenreeksen
Dit een poging tot meerdere wav bestanden en spelen de juiste een
op basis van de volgorde van de nummers die gebeld hebt op de telefoon
Als 228626b dan de batman-thema spelen
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"
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
// -----------------
int needToPrint = 0;
int count;
mijne
int redLed = 8;
int in_from_dial = 7;
int lightOn = 6;
int craddleUp = 9;
int val = laag; variabele de lees waarde op te slaan
//
int lastState = laag;
int trueState = laag;
lange lastStateChangeTime = 0;
int uitgeschakeld = 0;
int debounceDelay = 10;
String newstring;
char Tester [] = "123";
char Batman [] = "228626";
char Spiderman [] = "774337626";
char Superman [] = "78737626";
char Batgirl [] = "2284475";
-einde van V!---
VOID Setup {}
seriële poort instellen
Serial.begin(9600);
putstring_nl ("WaveHC met select songs");
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);
van V1
pinMode (in_from_dial, INPUT); 12
pinMode (lightOn, OUTPUT); 11
pinMode(craddleUp,INPUT); 9
pinMode(redLed,OUTPUT); 9
einde v1
pin13 LED
pinMode (13, OUTPUT);
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!");
}
idee is hier
de lus wordt voortgezet totdat de reciever pickerd is
dan is de volgorde van de nummers opgenomen en gecontroleerd
Als een hit wordt gevonden, schakelt op licht (voor Batman) en/of
de song afspelen
void loop {}
wachten op de ontvanger op te heffen
Zodra opgeheven, kan dan het kiezen worden gecontroleerd
inschakelen van rode leidde tot het tonen van dat de telefoon is levend
Val = digitalRead(craddleUp); Lees de invoer pin
Als (val == HIGH) {}
digitalWrite (redLed, hoge);
int lezing = digitalRead(in_from_dial);
Als ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {}
de wijzerplaat is niet wordt gekozen, of net klaar is wordt gekozen.
Als (needToPrint) {}
Als het klaar is pas wordt gekozen, moeten we het nummer van de seriële afgeven
lijn en reset de telling. We mod de telling door 10 omdat '0' 10 pulsen stuurt.
Serial.println (graaf 10%, DEC);
Nu moet de telling toevoegen aan de testtekenreeks en vervolgens testen tegen de
vereiste tekenreeks om een hit
newstring.concat(Count);
als koord Batman evenaart, schakelt op licht en wav-bestand starten
Serial.println(newstring);
delay(2000);
// --------------------
// -------------- Batman -----------------
Als ((newstring.equals(Batman)) || (newstring.equals(Tester))) {
digitalWrite (lightOn, hoge);
playcomplete ("BATMAN. WAV");
digitalWrite(lightOn,LOW);
}
---Spiderman---
Als (newstring.equals(Spiderman)) {}
bat_signal();
playcomplete("1.wav");
}
// --------------Superman -----------------
Als (newstring.equals(Superman)) {}
bat_signal();
playcomplete("1.wav");
}
// -------------- BatGirl -----------------
Als (newstring.equals(Batgirl)) {}
bat_signal();
playcomplete("1.wav");
}
needToPrint = 0;
Graaf = 0;
uitgeschakeld = 0;
}
}
Als (lezen! = lastState) {}
lastStateChangeTime = millis();
}
Als ((millis()-lastStateChangeTime) > debounceDelay) {}
ontdendering - dit gebeurt zodra het wordt gestabiliseerde
Als (lezen! = trueState) {}
Dit betekent dat de schakelaar ofwel gewoon verdwenen uit gesloten heeft -> open of vice versa.
trueState = lezing;
Als (trueState == HIGH) {}
_ / / verhogen de telling van de pulsen als het hoge gegaan.
Graaf ++;
needToPrint = 1; We moeten dit getal afdrukken (zodra de wijzerplaat heeft gebeëindigd draaien)
}
}
}
lastState = lezing;
}
anders
{
newstring = "";
digitalWrite (lightOn, laag);
digitalWrite(redLed,LOW);
}
}
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();
}
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);
}
De Arduino die ik gebruikte was een UNO
Nogmaals, ik wou dat ik meer foto's en betere documentatie. Volgende keer.
Mijn dochter dacht dat is een nette geschenk en ze leek gelukkig maar dat is wat dochters doen. :)