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
}