Roterende telefoon bellen Arduino + onzichtbare inkt = huidige verjaardag


ik heb een aantal draaiknop telefoons en telefoon onderdelen die ik dacht dat ik kon gebruiken op een domme manier.

Ik beginnen met dit instructable

Toen ik klaar, heb ik een object dat als volgt werkt:

-kiezen van een nummer of reeks nummers
-Druk op de grote rode knop voor het testen van die reeks.
-de arduino zal Speel een lied op basis van het eerste cijfer van de sequentie gekozen.
- Maar als de juiste volgorde is gekozen, in dit geval de naam van mijn dochters, de arduino zal spelen de "Happy Birthday song", draai de metalen scherm en licht de UV LED's. Dit zal onthullen het "Happy Birthday bericht schreef ik op het scherm met de onzichtbare inkt pen.

video te volgen

Dus in principe is wat ik heb:

De Arduino registreert de input van de roterende telefoon als een tekenreeks en vervolgens de code gecontroleerd voor een bepaalde tekenreeks.

Als er geen die string, dan speelt één van 5 nummers die zijn gecodeerd in de schets.

Als het de juiste tekenreeks dan de arduino gelast de servo te schakelen en de UV-lampen licht en speelt de verjaardag lied.

De code als volgt:

Ik vond de stukken van het hier en daar. De Testsignaal-functie wordt gebruikt samen met een pitches.h-bestand.

/ * 3/21/12 - begonnen met het maken van project met draaiknop
-moet worden gebruikt voor verjaardagscadeau voor Christine
-idee:
kiezen van nummers speelt een ander nummer
haar naam kiezen zal licht LEDs die laten de Happy birthday messgae zien zal
of de gelukkig aniversity voor Harrie en Riek

-beginnen met de code voor de batphonev1
-veel wijzigingen wilt aanbrengen

-v2 - beginnen te kijken watys hebben vele nummers of notities

*/
#include < Servo.h >
#include "pitches.h"

Proficiat met je verjaardag
int melodybd [] = {NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_C4,
NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4, NOTE_C4, NOTE_C4,
NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_B4, NOTE_B4, NOTE_A4,
NOTE_F4, NOTE_G4, NOTE_F4};
int noteDurationsbd [] = {3, 16, 4, 4, 4, 2, 3, 16, 4, 4, 4,2, 3, 16, 4,4,4,4,4,3,16,4,4,4,2};
int numNotesbd = 25;

verjaardag
Hier komt de bruid
int melodyanv [] = {NOTE_A3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_A3, NOTE_D4, NOTE_B3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_D4};
Opmerking de duur: 4 = kwartnoot, 8 = achtste noot, enz.:
int noteDurationsanv [] = {2,3,8,1,2,3,8,1,2,3,8,2,3,8,2,3,8,1};
int numNotesanv = 18;

1, starwars
int melody1 [] = {NOTE_G5, NOTE_G5, NOTE_G5, NOTE_DS5, NOTE_AS5, NOTE_G5, NOTE_DS5, NOTE_AS5, NOTE_G5};
int noteDurations1 [] {3, 3, 3, 4, 8, 3, 4, 8, 2} =;
int numNotes1 = 9;

//   2. twee bits ding
int melody2 [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4};
int noteDurations2 [] = {4,8,8, 4,4,4,4,4};
int numNotes2 = 8;

3 pop gaat de wezel

int melody3 [] {} =
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_C4,
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_C4, 0,
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_C4, 0, NOTE_A4,
NOTE_D4, NOTE_F4, NOTE_E4, NOTE_C4, 0};

int noteDurations3 [] = {4, 8, 4, 8, 8, 8, 8, 4, 8, 4, 8, 4, 8, 3, 4, 8, 4, 8, 4, 8, 8, 8, 8, 4, 4, 2, 4, 4, 4, 4, 4};
int numNotes3 = 31;

4 batman
int melody4 [] = {NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3 NOTE_GS3, NOTE_GS3, NOTE_E4, NOTE_E4};
int noteDurations4 [] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4,8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4};
int numNotes4 = 32;

5 bekende klassieke
int melody5[]= {NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4 ,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_E4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_D4,NOTE_G3,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_C4 NOTE_C4};
Opmerking de duur: 4 = kwartnoot, 8 = achtste noot, enz.:
int noteDurations5 [] = {4,4,4,4,4,4,4,4,4,4,4,4,2,8,2,4,4,4,4,4,4,4,4,4,4,4,4,2, 4,4,4,4,4,8,8,4,4,4,8,8,4,4,4,4,2,4,4,4,4,4,4,4,4,4,4,4,4,2,8,2};
int numNotes5 = 62;

int needToPrint = 0;
int count;
mijne
Const int try_it = 3;
Const int in_from_dial = 2;
Const int lightOn = 11;

int buttonState = 0;         variabele voor het lezen van de drukknop status
int firstnum = 0;
char speelde = 'N';
einde mijne

int lastState = laag;
int trueState = laag;
lange lastStateChangeTime = 0;
int uitgeschakeld = 0;

constanten

int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;

tekenreeksen
String newstring;
char Carrie [] = "227743";
char Daniel [] = "326435";
char [Big50] = "1";
char Harrie [] = "2";

Servo
Servo myservo;  maken van servo-object om te bepalen van een servo
int pos = 0;    variabele op te slaan van de servo positie

// --------------------------------------------

VOID Setup
{

Serial.begin(9600);

pinMode (in_from_dial, INPUT);  2
pinMode (try_it, INPUT);  3
pinMode (lightOn, OUTPUT);    11
pinMode (13, OUTPUT);    12
myservo.attach(6);  hecht de servo op pin 6 aan de servo-object

}

void loop {}
digitalWrite (13, hoge);   de LED aangezet
/*
gebruiker zal nummers bellen totdat ze de "try it"-buttonb raken
dus nodig om tekenreeks te maken totdat de knop is ingedrukt
*/
de status van de knop tryit lezen
digitalWrite (lightOn, laag);
buttonState = digitalRead(try_it);
try_it = hoog;
Als (buttonState == LOW) {}

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

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
{
Nu wil gebruiker testen zijn kiezen
//
speelde = 'N';
Serial.println(newstring);
test_it();
newstring = "";

}
}
// --------------------- my functions -------------------------
// ------------------------------------------------------------

Zet leds

VOID turnon_Leds()
{
digitalWrite (lightOn, hoge);

}

// --------------------------------------------------
testen van de string

VOID test_it()
{

Serial.println(newstring);
Serial.println(firstnum);
delay(2000);

/*

als "BIG50" dan spelen Happy Birthday, draai servo, inschakelen van Leds
als "HARRIE" dan spelen anv lied, trun servo leds inschakelen

*/
Als (newstring.equals(Carrie)) {}

Draai servo
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS);              servo naar positie in de variabele 'pos' vertellen
delay(15);                       wacht 15ms voor de servo te bereiken de positie
}

turnon_Leds();

voor (int thisNote = 0; thisNote < numNotesbd; thisNote ++) {}

int noteDuration = 1000/noteDurationsbd [thisNote];

Toon (8, melodybd[thisNote],noteDuration);

om te onderscheiden van de notities, stel een minimuminterval tussen hen.
de nota's duur + 30% schijnt goed te werken:
int pauseBetweenNotes = noteDuration * 1.4;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:

noTone(8);
}
speelde = 'Y';
delay(2000);

}

//-----------------------------------------

Als (newstring.equals(Daniel)) {}

Draai servo
voor (pos = 180; pos > = 15; pos-= 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS);              servo naar positie in de variabele 'pos' vertellen
delay(15);                       wacht 15ms voor de servo te bereiken de positie
}


turnon_Leds();

voor (int thisNote = 0; thisNote < numNotesbd; thisNote ++) {}

int noteDuration = 1000/noteDurationsbd [thisNote];

Toon (8, melodybd[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.4;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(8);
}
speelde = 'Y';
newstring = "";
delay(2000);
}

Serial.println got ("here1");
delay(500);

eerste difgit nodig en gebruik vervolgens zaak om het nummer te spelen

Serial.println("here2");
Serial.println(newstring);
delay(1000);

Als (speelde == 'N') {}

1 0or 9
Als ((newstring.startsWith("1")) || (newstring.startsWith("9"))) {

itereren over de noten van de melodie:
voor (int thisNote = 0; thisNote < numNotes1; thisNote ++) {}
int noteDuration = 1000/noteDurations1 [thisNote];
Toon (8, melody1[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(8);

}
speelde = 'Y';
delay(500);
newstring = "";
}

begint met 2 of 8
Als ((newstring.startsWith("2")) || (newstring.startsWith("8")))
{

itereren over de noten van de melodie:
voor (int thisNote = 0; thisNote < numNotes2; thisNote ++) {}
int noteDuration = 1000/noteDurations2 [thisNote];
Toon (8, melody2[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(8);

}
speelde = 'Y';
delay(500);
newstring = "";
}

begint met 3 of 7
Als ((newstring.startsWith("3")) || (newstring.startsWith("7")))
{

itereren over de noten van de melodie:
voor (int thisNote = 0; thisNote < numNotes3; thisNote ++) {}
int noteDuration = 1000/noteDurations3 [thisNote];
Toon (8, melody3[thisNote],noteDuration);


int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(8);

}
speelde = 'Y';
delay(500);
}

begint with4 of 6
Als ((newstring.startsWith("4")) || (newstring.startsWith("6")))
{

itereren over de noten van de melodie:
voor (int thisNote = 0; thisNote < numNotes4; thisNote ++) {}
int noteDuration = 1000/noteDurations4 [thisNote];
Toon (8, melody4[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(8);

}
speelde = 'Y';
delay(500);

}

begint met 5 of 0
Als ((newstring.startsWith("5")) || (newstring.startsWith("0")))
{

itereren over de noten van de melodie:
voor (int thisNote = 0; thisNote < numNotes5; thisNote ++) {}
int noteDuration = 1000/noteDurations5 [thisNote];
Toon (8, melody5[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(8);

}
speelde = 'Y';
delay(500);

}

}

einde van de lus
}

Gerelateerde Artikelen

De wijzerplaat van een roterende telefoon aan een Arduino interface

De wijzerplaat van een roterende telefoon aan een Arduino interface

een oude roterende telefoon kan worden gebruikt voor een aantal doeleinden in uw projecten Arduino - het als een roman als invoerapparaat gebruiken, of gebruik van de Arduino interface een roterende telefoon naar uw computer.Dit is een zeer basisgids
Raspberry Pi in een roterende telefoon

Raspberry Pi in een roterende telefoon

Ik vond een oude Western Electric roterende telefoon in mijn zolder. Het is echt een geweldig stukje hardware. Het lijkt goed te werken verschillende decennia na de bouw ondanks wat misbruik maken van het duurde voordat eindigend in mijn zolder. Ik h
How to turn een roterende telefoon van old-school in een invoerapparaat.

How to turn een roterende telefoon van old-school in een invoerapparaat.

Roterende telefoons zijn zeer geschikt voor de beginner hackers.Ze zijn niet erg ingewikkeld: voor het grootste deel, je gewoon kijken naar de draden en raden wat de meeste van hen controle.Slip een microcontroller in, en u kunt alle onderdelen ervan
RotaryX: Hoe Hack een roterende telefoon

RotaryX: Hoe Hack een roterende telefoon

Net als een heleboel analoge technologie maken roterende telefoons met een reeks van hoog/laag-switches die gemakkelijk kan worden aangesloten in een Arduino voor programmering adventures. Deze tutorial zal u door het proces van het openen en herbedr
Purple roterende telefoon

Purple roterende telefoon

ik had een oude roterende telefoon die was behoefte aan een goede make over.  Dus waarom niet paars!Stap 1: Telefoon krijgen en schoon ik deze telefoon vond in een vastgoed te koop.  Het is erg vies maar lijkt te werken.  Ik gebruikte windex and alot
Bat telefoon van oude roterende telefoon

Bat telefoon van oude roterende telefoon

Disclaimer: geen oude rotary telefoons gewond in dit project!   Ik had een heleboel roterende telefoons gekocht van een vastgoed te koop en een doosje van gebroken telefoons en telefoon onderdelen opgenomen in deze aankoop was.  Het is vanuit dit vak
Roterende telefoon iPod Dock

Roterende telefoon iPod Dock

ik heb altijd opnieuw purposing een ding naar het andere. Dit instructable zal tonen foto's van mijn voltooide iPod dock met commentaar op hoe ik het samen zet. Ik verontschuldig me dat ik niet van foto's door het hele proces nemen. Ik was gewoon te
25 cent onzichtbare inkt/Pen (UV licht zichtbaar)

25 cent onzichtbare inkt/Pen (UV licht zichtbaar)

heb je ooit wilde om een van die cool onzichtbare inkt pennen uit de winkel, zodat u geheime boodschappen naar je vrienden schrijven kunt? Of misschien wilt u gebruiken voor het markeren van volkeren handen voor toelating tot een partij. Met dit Inst
Hoe maak je onzichtbare inkt

Hoe maak je onzichtbare inkt

Dus ik kwam op dit verbazende kon formule voor het maken van een onzichtbare inkt, met alleen worden gezien onder UV/zwart licht.Hoe?Blij dat je vroeg!Zwarte lichten zijn niet dat verschillend van een ander type van licht, of gloeilamp, TL, of gewoon
Super eenvoudige warmte geactiveerd onzichtbare inkt (niet citroensap)

Super eenvoudige warmte geactiveerd onzichtbare inkt (niet citroensap)

5min $5 onzichtbare inkt gebruik te maken van de al-er hitte gevoelige chemische stof op thermisch papier. Ik denk dat dit werkt veel beter dan citroensap omdat citroen moet u het papier om te laten zien up.this vereist veel minder warmte aan halve b
Holle boek, onzichtbare inkt, zwart licht

Holle boek, onzichtbare inkt, zwart licht

In de familie cadeau-uitwisseling kreeg ik mijn 13-jarige broer, die echt in spy stuff is.  In het denken van wat ik hem maken kon kwam ik een instructable voor een uitgeholde boek.  Ik had het eerder gedaan en het werkte echt goed, dus de eerste ins
Controle robotarm met handschoenen, Android telefoon en Arduino

Controle robotarm met handschoenen, Android telefoon en Arduino

Vandaag hebben we bijna 2 technieken om te spelen met robotarm, hetzij door knoppen voor voorbeeld als op spel schild of het gebruik van handschoenen die sensoren bevatten. Nog, vandaag zal ik laten u een nieuwe techniek met behulp van alleen je Andr
Hoe te maken van onzichtbare inkt (en te bekijken)

Hoe te maken van onzichtbare inkt (en te bekijken)

dit is een mooie en gemakkelijke manier om onzichtbare inkt en om te zien uw schrijven wanneer je maar wilt.Stap 1: Stap 1: materialen Zal u een normale gele markeerstift, kan het een andere kleur, maar geel is het beste omdat zij gewoonlijk werken.
Hoe maak je een veren pen (plus onzichtbare inkt!)

Hoe maak je een veren pen (plus onzichtbare inkt!)

Veer pennen zijn geweldig!Ze kunnen worden gebruikt als kostuum rekwisieten, geheime boodschap pennen, wassen speelgoed en nog veel meer!Met dit instructable, ik zal je laten zien hoe maak je een veren pen, PLUS onzichtbare inkt te gaan met haar!Geli