Construye una jukebox con tonos de llamada RTTTL
FunduinoÚltima actualización el
Klingeltöne im RTTTL-Format per Tastenpad auswählen und abspielen
RTTTL-Klingeltöne
Benötigte Bauteile
1 / 2
Der Schaltplan
Benötigte Bibliotheken installieren
1 / 2
Bibliotheken einbinden und Variablen definieren
Bibliotheken einbinden und Variablen definieren
#include "PlayRtttl.hpp" #include "LiquidCrystal_I2C.h" // Name des LCDs (lcd) festlegen LiquidCrystal_I2C lcd(0x27, 20, 4); // Pin des Kautsprechers #define Lautsprecher 7 // Variable für die gedrückte Taste des Tastenpads int GedrueckteTaste; String TitelSong; char TeDeum[] = "Charpentier/Te_Deum:d=4,o=5,b=63:8c,8f,16f,16g,8a,8f,c6,8a,8a,8a#,16c6,16a#,16a,16a#,8c6,16g,16f,16g,16a,8g,8c,8f,16f,16g,8a,8f,c6,8a,8a,16a#,16c6,16a,16a#,g,16f,2f"; char FuerElise[] = "Beethoven/Für_Elise:d=8,o=5,b=125:32p,e6,d#6,e6,d#6,e6,b,d6,c6,4a.,32p,c,e,a,4b.,32p,e,g#,b,4c.6,32p,e,e6,d#6,e6,d#6,e6,b,d6,c6,4a.,32p,c,e,a,4b.,32p,d,c6,b,2a"; char OdeandieFreude[] = "Beethoven/Ode_an_die_Freude:d=4,o=6,b=100:a5,a5,a_5,c,c,a_5,a5,g5,f5,f5,g5,a5,a.5,8g5,2g5,"; char Bolero[] = "Ravel/Bolero:d=4,o=5,b=80:c6,8c6,16b,16c6,16d6,16c6,16b,16a,8c6,16c6,16a,c6,8c6,16b,16c6,16a,16g,16e,16f,2g,16g,16f,16e,16d,16e,16f,16g,16a,g,g,";
Der setup-Teil
Der setup-Teil
void setup()
{
// LCD starten
lcd.init();
// Hintergrundbeleuchtung des LCDs einschalten
lcd.backlight();
}Das Tastenpad abfragen
Beispiel: Abfrage der linken Taste
// analogen Wert an A0 abfragen
int Analogwert = analogRead(A0);
switch (Analogwert)
{
case 0 ... 20:
// char-Array des Titels in String umwandeln
TitelSong = String(TeDeum);
// Funktion aufrufen, Interpret/Titel extrahieren
ZeigeTitel(TitelSong);
// Titel spielen
playRtttlBlocking(Lautsprecher, TeDeum);
break;
}Der vollständige loop-Teil
void loop()
{
// Tastenpad am Eingang A0 abfragen
int Analogwert = analogRead(A0);
switch (Analogwert)
{
// linke Taste;
case 0 ... 20:
// char-Array des Titels in String umwandeln
TitelSong = String(TeDeum);
// Funktion aufrufen, Interpret/Titel extrahieren
ZeigeTitel();
// Titel spielen
playRtttlBlocking(Lautsprecher, TeDeum);
break;
// obere Taste
case 30 ... 60:
TitelSong = String(FuerElise);
ZeigeTitel();
playRtttlBlocking(Lautsprecher, FuerElise);
break;
// rechte Taste
case 70 ... 120:
TitelSong = String(OdeandieFreude);
ZeigeTitel();
playRtttlBlocking(Lautsprecher, OdeandieFreude);
break;
// untere Taste
case 150 ... 200:
TitelSong = String(Bolero);
ZeigeTitel();
playRtttlBlocking(Lautsprecher, Bolero);
break;
// rechte äußere Taste -> Menü anzeigen
case 300 ... 400:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1: Te Deum");
lcd.setCursor(0, 1);
lcd.print("2: F\365r Elise");
lcd.setCursor(0, 2);
lcd.print("3: Ode an die Freude");
lcd.setCursor(0, 3);
lcd.print("4: Bolero");
break;
}
}Die Funktion ZeigeTitel
Die Funktion ZeigeTitel
void ZeigeTitel()
{
// Teil des Strings bis zum ersten Doppelpunkt kürzen, enthält die Informationen zu Interpret und Titel
TitelSong = TitelSong.substring(0, TitelSong.indexOf(":"));
// _ durch leerzeichen ersetzen
TitelSong.replace("_", " ");
// erster Teil des Strings bis zum / -> Name des Interpreten
String Interpret = TitelSong.substring(0, TitelSong.indexOf("/"));
// zweiter Teil des Strings vom / + 1 bis zum Ende des Strings -> Name des Titels
String Titel = TitelSong.substring(TitelSong.indexOf("/") + 1, TitelSong.length());
// Titel auf dem LCD anzeigen
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Spiele:");
lcd.setCursor(0, 1);
lcd.print(Interpret);
lcd.setCursor(0, 2);
lcd.print(Titel);
}Calificar la guía