Piano med melodin "nyckel" (3 / 9 steg)
Steg 3: Lägg till kod
För att få koden fungerar var svårare än jag trodde. Jag väljer en traditionell 'Sinterklaas' Låt om du vill öppna och den låten har upprepade toner i det vad fungerade inte för den första koden som jag skrev.
Inledande melodin för min låda är gcceddFbbdc.
Du måste förstå vissa Arduino kodning om du vill ändra detta till din egen melodi. Det är inte en lång eller svår skiss så att du förmodligen kommer att hantera om du har lite erfarenhet med en Arduino.
Skiss:
gcceddFbbdc 25576684465
#include
Servo myservo;
int buttonPin = A0;
int knappen = 0;
int piezo = 3;
int toon = 0; f = 1 g = 2 en = 3 b = 4 c = 5 d = 6 e = 7 F = 8
int volgende = sant;
int teller = 1;
void setup() {
Serial.BEGIN(9600); felsökning
pinMode (13, OUTPUT);
myservo.attach(9);
myservo.writeMicroseconds(1000); }
void loop() {
Delay(30); Debounce
knappen = analogRead(buttonPin);
Serial.Print(Toon);
Serial.Print(volgende);
Serial.println(Button); felsökning
om (knappen > 400) {tonen (piezo, 349), toon = 8; volgende = false;} / / F
annat {om (knappen > 150) {tonen (piezo, 330), toon = 7; volgende = false;} / / e
annat {om (knappen > 100) {tonen (piezo, 294), toon = 6; volgende = false;} / / d
annat {om (knappen > 80) {tonen (piezo, 262), toon = 5; volgende = false;} / / c
annat {om (knappen > 60) {tonen (piezo, 247), toon = 4; volgende = false;} / / b
annat {om (knappen > 48) {tonen (piezo, 220), toon = 3; volgende = false;} / / a
annat {om (knappen > 38) {tonen (piezo, 196), toon = 2; volgende = false;} / / g
annat {om (knappen > 20) {tonen (piezo, 175), toon = 1; volgende = false;} / / f
Else{noTone(piezo); volgende = true ;}}}
om (teller == 1 & & toon == 2 & & volgende == true) {teller = 2; volgende = false;}
om (teller == 2 & & toon == 5 & & volgende == true) {teller = 3; volgende = false;} annat {om (volgende == true & & teller == 2 & & toon! = 2) {teller = 1 ;}}
om (teller == 3 & & toon == 5 & & volgende == true) {teller = 4; volgende = false;} annat {om (volgende == true & & teller == 3 & & toon! = 2) {teller = 1 ;}}
om (teller == 4 & & toon == 7 & & volgende == true) {teller = 5; volgende = false;} annat {om (volgende == true & & teller == 4 & & toon! = 7 & & toon! = 5) {teller = 1 ;}}
om (teller == 5 & & toon == 6 & & volgende == true) {teller = 6; volgende = false;} annat {om (volgende == true & & teller == 5 & & toon! = 7) {teller = 1 ;}}
om (teller == 6 & & toon == 6 & & volgende == true) {teller = 7; volgende = false;} annat {om (volgende == true & & teller == 6 & & toon! = 7) {teller = 1 ;}}
om (teller == 7 & & toon == 8 & & volgende == true) {teller = 8; volgende = false;} annat {om (volgende == true & & teller == 7 & & toon! = 6 & & toon! = 8) {teller = 1 ;}}
om (teller == 8 & & toon == 4 & & volgende == true) {teller = 9; volgende = false;} annat {om (volgende == true & & teller == 8 & & toon! = 8) {teller = 1 ;}}
om (teller == 9 & & toon == 4 & & volgende == true) {teller = 10; volgende = false;} annat {om (volgende == true & & teller == 9 & & toon! = 8) {teller = 1 ;}}
om (teller == 10 & & toon == 6 & & volgende == true) {teller = 11; volgende = false;} annat {om (volgende == true & & teller == 10 & & toon! = 4) {teller = 1 ;}}
om (teller == 11 & & toon == 5 & & volgende == true) {teller = 12; volgende = false;} annat {om (volgende == true & & teller == 11 & & toon! = 6) {teller = 1 ;}}
om (teller == 12 & & volgende == true) {teller = 13 digitalWrite (13, hög); myservo.writeMicroseconds(2000); delay(5000);} //2000 är värdet för öppna servo
om (teller == 13 & & volgende == true & & toon! = 5) {digitalWrite (13, låg), teller = 1; myservo.writeMicroseconds(1000);} //1000 är värdet för slutna servo
}