Werden die Tasten des Tastenpads gedrückt, wird eine Melodie abgespielt:
- Taste 1: Alle meine Entchen
- Taste 2: Backe Backe Kuchen
- Taste 3: Tonleiter von C1 bis C2
- Taste 4: Bruder Jakob
So klingt es: (die Musiker*innen mögen mir verzeihen)
Alle meine Entchen
Backe backe Kuchen
Tonleiter
Bruder Jakob
Benötigte Bauteile:
- Lautsprecher
- Tastenpad
- Leitungsdrähte
Baue die Schaltung auf:
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Definiere die ➨Arrays für die Frequenzen der Töne und die Länge der Töne in Millisekunden.
Hier findest du eine 🔗Übersicht (externer Link, abgerufen am 15.10.2023) über die Frequenzen.
// Frequenzen: c' d' e' f' g' a' h' c''
int Tonleiter[] =
{261, 293, 329, 349, 391, 440, 493, 523, 493, 440, 391, 349, 329, 293, 261};
// Länge der Töne "Tonleiter" in Millisekunden
int TonlaengeTonleiter[] =
{200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200};
// Frequenzen "Alle meine Entchen“
int AlleMeineEntchen[] =
{261, 293, 329, 349, 391, 391, 440, 440, 440, 440, 391, 440, 440, 440, 440, 391, 349, 349, 349, 349, 329, 329, 391, 391, 391, 391, 261};
// Länge der Töne "Alle meine Entchen“ in Millisekunden
int TonlaengeAlleMeineEntchen[] =
{250, 250, 250, 250, 500, 500, 250, 250, 250, 250, 500, 250, 250, 250, 250, 500, 250, 250, 250, 250, 500, 500, 250, 250, 250, 250, 500, 500};
// Frequenzen "Bruder Jakob“
int BruderJakob[] =
{349, 391, 440, 349, 349, 391, 440, 349, 440, 466, 523, 440, 466, 523 };
// Länge der Töne "Bruder Jakob“ in Millisekunden
int TonlaengeBruderJakob[] =
{500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 1000, 500, 500, 1000};
// Frequenzen "Backe backe Kuchen“
int BackeKuchen[] =
{440, 440, 493, 493, 440, 369, 293, 440, 440, 493, 493, 440,
369};
// Länge der Töne "Backe backe Kuchen“ in Millisekunden
int TonlaengeBackeKuchen[] =
{250, 250, 250, 250, 500, 250, 250, 250, 250, 250, 250, 500, 250};
int LAUTSPRECHER = 4;
int Taster;
int Analogwert;
Der setup-Teil.
void setup()
{
// wenn der Wert der gedrückten Taste angezeigt werden soll
// Serial.begin(9600);
// auf serielle Verbindung warten
// while (!Serial) {;}
}
Die gedrückte Taste wird durch die Messung des analogen Wertes ermittelt. Leider kann dieser Wert nur ungefähr angegeben werden, so dass es beim laufenden Programm gelegentlich zu nicht erwünschten Effekten kommen kann.
Taster | Ungefährer analoger Wert |
---|---|
links | 0 - 5 |
oben Mitte | 30 - 40 |
unten Mitte | 85 - 95 |
rechts | 160 - 170 |
außen | 330 - 380 |
nicht gedrückt | 1023 |
Verwende die Funktion ➨Tasterabfrage.
int Tasterabfrage()
{
int Analogwert = analogRead(A0);
// kurzes delay() -> doppelten Tastendruck so weit wie möglich verhindern
delay(200);
/*
A0 gibt je nach Taster einen Wert aus
über den Seriellen Monitor wird dieser Wert angezeigt
und kann dann eventuell angepasst werden
*/
// Serial.println(Analogwert);
switch (Analogwert)
{
case 0 ... 20:
Taster = 1;
break;
case 30 ... 60:
Taster = 2;
break;
case 70 ... 120:
Taster = 3;
break;
case 150 ... 200:
Taster = 4;
break;
case 300 ... 400:
Taster = 5;
break;
default:
return 0;
}
// gedrückten Taster zurückgeben
return Taster;
}
Im loop-Teil wird der gedrückte Taster abgefragt und in einer for-Schleife die Tonfolge mit den dazugehörigen Tonlängen gespielt.
Die for-schleife wird vom ersten bis zum letzten Element des Arrays ausgeführt.
sizeof() bestimmt die Anzahl der Elemente eines Arrays. Hierzu wird zunächst der Speicherplatz in Bytes bestimmt den alle Elemente als Summe belegen, anschließend wird dieser Wert durch den vom ersten Element belegten Speicherplatz geteilt.
void loop()
{
Taster = Tasterabfrage();
// Taste links
if (Taster == 1)
{
// Alle meine Entchen
for (int i = 0; i < sizeof(AlleMeineEntchen) / sizeof(AlleMeineEntchen[0]); i ++)
{
tone(LAUTSPRECHER, AlleMeineEntchen[i]);
delay(TonlaengeAlleMeineEntchen[i]);
delay(10);
noTone(LAUTSPRECHER);
}
}
// Taste oben Mitte
// backe backe Kuchen spielen
if (Taster == 2)
{
// Backe backe Kuchen
for (int i = 0; i < sizeof(BackeKuchen) / sizeof(BackeKuchen[0]); i ++)
{
tone(LAUTSPRECHER, BackeKuchen[i]);
delay(TonlaengeBackeKuchen[i]);
delay(20);
noTone(LAUTSPRECHER);
}
}
// Taste unten Mitte
// Tonleiter spielen
if (Taster == 3)
{
for (int i = 0; i < sizeof(Tonleiter) / sizeof(Tonleiter[0]); i ++)
{
tone(LAUTSPRECHER, Tonleiter[i]);
delay(TonlaengeTonleiter[i]);
delay(10);
noTone(LAUTSPRECHER);
}
}
// Taste rechts
// Bruder Jakob spielen
if (Taster == 4)
{
// Bruder Jakob
for (int i = 0; i < sizeof(BruderJakob) / sizeof(BruderJakob[0]); i ++)
{
tone(LAUTSPRECHER, BruderJakob[i]);
delay(TonlaengeBruderJakob[i]);
delay(10);
noTone(LAUTSPRECHER);
}
}
}
Verwandte Anleitungen:
- Farbenspiele mit einem LED-Streifen
- Farbenspiele mit einer RGB-LED
- Jukebox mit Klingeltönen
- Länder-Info
- LEDs mit einem Tastenpad schalten
- Multiplikations-Taschenrechner
- Pin-Eingabe
- Pin-Eingabe mit LCD und Servomotor
- Töne erzeugen mit dem Tastenfeld
Letzte Aktualisierung: