Jukebox mit Klingeltönen

Lesezeit: 6 Minuten

Seite als PDF

RTTTL Klingeltöne

RTTTL (Ring Tone Text Trans­fer Lan­guage) sind Klin­geltöne, die ursprünglich von Nokia für ihre Mobil­tele­fone entwick­elt wur­den. Ein Klin­gel­ton muss drei Bestandteile haben:

  • den Namen des Klin­gel­tons
  • die Stan­dard­vor­gaben: die Dauer der Noten und die ver­wen­dete Oktave
  • die durch Kom­ma­ta getren­nten Noten (inter­na­tionale Noten­beze­ich­nung c, d, e, f, g, a, b) alle Teile sind durch einen Dop­pelpunkt getren­nt

Beispiel Te Deum:

TeDeum:d=4,o=5,b=63:8c,8f,16f,16g,8a

d=4: Stan­dard­noten­länge Viertel­note

o=5: Angabe der Oktave

b=63: Abspielgeschwindigkeit 63 Schläge pro Minute

8c: Note C als Achtel­note gespielt

Klin­geltöne zum Down­load bei 🔗PICAXE (abgerufen am 8.5.23)

Jukebox im Seriellen Monitor

Das Pro­gramm ver­wen­det im ersten Schritt den Seriellen Mon­i­tor um ver­schiedene Melo­di­en abzus­pie­len.

So sieht es aus:

Verwendete Hardware

Der Laut­sprech­er wird mit dem Sig­nalpin (gelbes Kabel) an den Pin 7 des Arduinos angeschlossen, das schwarze Kabel führt zu GND am Arduino. Der Wider­stand dient nur dazu die Laut­stärke zu reduzieren.

Benötigte Bibliothek installieren

Klicke auf das Sym­bol Bib­lio­thek und suche im näch­sten Dia­log nach der Bib­lio­thek PlayRtt­tl.

Definition der Variablen und Einbinden der Bibliothek

Die Klin­geltöne müssen für den Befehl zum Abspie­len als char-Array definiert wer­den. Die eck­i­gen Klam­mern zeigen, dass es sich um ein Array han­delt.

Titel und Inter­pret sollen aus dem Array extrahiert wer­den. Der erste Dop­pelpunkt markiert den Beginn der Noten.
Der / dient als Tren­nung zwis­chen Inter­pret und Titel.

Leerze­ichen sind in Vari­ablen nicht erlaubt.
Bei Titel, die ein Leerze­ichen enthal­ten, wird es zunächst mit einem Unter­strich „mask­iert“. Der Unter­strich wird später durch ein Leerze­ichen erset­zt.

Der setup-Teil

Hier wird der Serielle Mon­i­tor ges­tartet und das Menü angezeigt.

Der loop-Teil

Erläuterun­gen der Anweisun­gen:

while (Serial.available();

Die näch­sten Anweisun­gen wer­den nur dann aus­ge­führt, wenn im Seriellen Mon­i­tor etwas eingegeben wird

char Zeichen = Serial.read();

Vom Seriellen Mon­i­tor wird ein Zeichen gele­sen

if (Zeichen == ‘1’)

Wenn 1 eingegeben wurde, wer­den die Anweisun­gen in den geschweiften Klam­mern aus­ge­führt

Entsprechende Anweisun­gen gel­ten für die übri­gen Zif­fern

Titel­Song = String(TeDeum);

Für die „Weit­er­ver­ar­beitung“ muss das char-Array in einen String umge­wan­delt wer­den

ZeigeTi­tel();

Aufruf der Funk­tion Zeigeti­tel (Erläuterung im näch­sten Abschnitt)

playRtttlBlocking(Lautsprecher, TeDeum);

Titel auf dem Pin des Laut­sprech­ers abspie­len

Die Funktion ZeigeTitel

Der loop-Teil ruft die Funk­tion ZeigeTi­tel auf. Der String Titel­song muss jet­zt nach Namen des Inter­pre­ten und Namen des Titels getren­nt wer­den.

⇒Funk­tio­nen

Titel­Song = TitelSong.substring(0, TitelSong.indexOf(“:”));

Nach dem ersten Dop­pelpunkt suchen (index­Of) und mit sub­string den ersten Teil vom ersten Buch­staben (0) bis zum : extrahieren

TitelSong.replace(“_”, ” ”);

Alle _ durch Leerze­ichen erset­zen

String Inter­pret = TitelSong.substring(0, TitelSong.indexOf(“/”));

Die Buch­staben im String Titel­Song von 0 bis zum / enthal­ten den Inter­pre­ten

String Titel = TitelSong.substring(TitelSong.indexOf(“/”) + 1, TitelSong.length());

Der zweite Teil des Strings Titel­Song enthält den Titel. Er begin­nt mit dem Zeichen hin­ter dem / (+1) und endet mit der Länge des Strings (length)

Jukebox mit Tastenpad und LCD

Die Tas­ten eines Tas­ten­pads sollen jet­zt die Titel auswählen.

So sieht es aus:

Benötigte Bauteile:

  • Laut­sprech­er
  • Tas­ten­pad
  • 4‑zeiliges LCD mit I²C-Schnittstelle
  • Leitungs­drähte

Der Schaltplan

(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Zusätzlich benötigte Bibliothek installieren

Klicke auf das Sym­bol Bib­lio­thek und suche im näch­sten Dia­log nach der Bib­lio­thek Liq­uid­Crys­tal I2C.

Definition der Variablen und Einbinden der Bibliotheken

Der setup-Teil

Im set­up-Teil wird das LCD ges­tartet.

Der loop-Teil

Das gedrück­te Taste des Tas­ten­pads wird mit analo­gRead am Ein­gang A0 abge­fragt:

int Analog­w­ert = analogRead(A0);

Die Analo­gen Eingänge liefern Werte zwis­chen 0 und 1023. Je nach gedrück­ter Taste ergeben sich diese Werte:

Eine switch case Abfrage weist je nach Wert die entsprechende Aktion zu.

Beispiel Abfrage der linken Taste:

case 0 … 20 fragt den Wer­te­bere­ich zwis­chen 0 und 20 ab. Die übri­gen Wer­te­bere­iche wer­den entsprechend zugewiesen.

Beachte das Leerze­ichen vor und hin­ter den drei Punk­ten!

Der voll­ständi­ge loop-Teil:

Die Funktion ZeigeTitel

Die Funk­tion ZeigeTi­tel zeigt Inter­pret und Titel auf dem LCD an.


Seite als PDF

Verwandte Anleitungen:


    Letzte Aktualisierung: Okt. 23, 2025 @ 10:46