Jukebox mit Klingeltönen

 

Diese Anleitung beschreibt, wie du mit Lautsprecher, LCD und Tastenpad Klingeltöne abspielen kannst.

Inhalt

RTTL Klingeltöne

 

Nokia entwickelte für seine Mobiltelefone Klingeltöne, die z. B. als Anrufsignal abgespielt werden konnten.

Der daraus entwickelte Standard RTTTL (Ring Tone Text Transfer Language) enthält drei Bestandteile:

 

Ein Doppelpunkt trennt die einzelnen Teile.

Beispiel Te Deum:

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

d=4: Standardnotenlänge Viertelnote

o=5: Angabe der Oktave

b=63: Abspielgeschwindigkeit 63 Schläge pro Minute

8c: Note C als Achtelnote gespielt

🔗 PICAXE bietet Klingeltöne zum Download an.

Jukebox mit Tastenpad und LCD

Die Tasten eines Tastenpads sollen einen Titel auswählen. Dieser Titel wird auf dem LCD angezeigt und mit dem Lautsprecher abgespielt.

Das Programm im Film

Benötigte Bauteile

Beispiele für Lautsprecher

Die Lautstärke des Lautsprechers kann mit einem Widerstand reduziert werden.

Der Schaltplan

Benötigte Bibliotheken installieren

 

Klicke auf das Symbol Bibliothek und suche im nächsten Dialog nach der Bibliothek LiquidCrystal I2C und anschließend nach der Bibliothek PlayRtttl:

Bibliotheken einbinden und Variable 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

void setup()

{

  // LCD starten

  lcd.init();

  // Hintergrundbeleuchtung des LCDs einschalten

  lcd.backlight();

}

Der loop-Teil

Das gedrück­te Tas­te des analogen Keyboards wird mit ana­logRead am Ein­gang A0 abgefragt:

int Ana­log­wert = analogRead(A0);

Die Ana­lo­gen Ein­gän­ge lie­fern Wer­te zwi­schen 0 und 1023. Je nach gedrück­ter Tas­te erge­ben sich die­se Werte:

 

Eine switch case Abfra­ge weist je nach Wert die ent­spre­chen­de Akti­on zu.

Bei­spiel Abfra­ge der lin­ken Taste:

 

// analogen Wert an A0 abfragen

int Ana­log­wert = analogRead(A0);

switch (Analogwert)

{

  case 020:

      // char-Array des Titels in String umwandeln

      TitelSong = String(TeDeum);

      // Funktion aufrufen, Interpret/Titel extrahieren

      ZeigeTitel(TitelSong);

      // Titel spielen

      playRtttlBlocking(Lautsprecher, TeDeum);

      break;

}

case 0 … 20 fragt den Wer­te­be­reich zwi­schen 0 und 20 ab. Die übri­gen Wer­te­be­rei­che wer­den ent­spre­chend zugewiesen.
Beachte das Leerzeichen vor und hinter den drei Punkten!

Der vollständige loop-Teil:

 

void loop()

{

  // Tastenpad am Eingang A0 abfragen

  int Analogwert = analogRead(A0);

  switch (Analogwert)

  {

    // linke Taste;

    case 020:

      // 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 3060:

      TitelSong = String(FuerElise);

      ZeigeTitel();

      playRtttlBlocking(Lautsprecher, FuerElise);

      break;

    // rechte Taste

    case 70120:

      TitelSong = String(OdeandieFreude);

      ZeigeTitel();

      playRtttlBlocking(Lautsprecher, OdeandieFreude);

      break;

    // untere Taste

    case 150200:

      TitelSong = String(Bolero);

      ZeigeTitel();

      playRtttlBlocking(Lautsprecher, Bolero);

      break;

    // rechte äußere Taste -> Menü anzeigen

    case 300400:

      lcd.clear();

      lcd.setCursor(0, 0);

      lcd.print(„1: Te Deum“);

      lcd.setCursor(0, 1);

      lcd.print(„2: F365r Elise“);

      lcd.setCursor(0, 2);

      lcd.print(„3: Ode an die Freude“);

      lcd.setCursor(0, 3);

      lcd.print(„4: Bolero“);

      break;

  }

}

Die Funktion Zeigetitel

Der loop-Teil ruft die Funktion ZeigeTitel auf. Der String TitelSong muss jetzt nach Namen des Interpreten und Namen des Titels getrennt werden.

TitelSong = TitelSong.substring(0, TitelSong.indexOf(„:“));

indexOf sucht nach dem ersten Doppelpunkt, substring extrahiert den ersten Teil vom ersten Buchstaben (0) bis zum :

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

ersetzt alle _ durch Leerzeichen

String Interpret = TitelSong.substring(0, TitelSong.indexOf(„/“));

Die Buchstaben im String TitelSong von 0 bis zum / enthalten den Namen des Interpreten

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

Der zweite Teil des Strings TitelSong enthält den Titel. Er beginnt mit dem Zeichen hinter dem / (+1) und endet mit der Länge des Strings (length)

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);

}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft bis zu 10 % Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 4.000 Artikel sofort verfügbar!
  • Mehr als 10 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE
Benötigst du Unterstützung bei deinem Projekt?

Alle Modelle der hier gezeigten Modelle sind hier zum Download  in einer kompakten Zip Datei verfügbar.