Spiel­uhr mit dem Tastenpad

Lese­zeit: 6 Minu­ten
Navi­ga­ti­on

Wer­den die Tas­ten des Tas­ten­pads gedrückt, wird eine Melo­die abgespielt:

  • Tas­te 1: Ton­lei­ter von C1 bis C2
  • Tas­te 2: Bru­der Jakob 
  • Tas­te 3: Alle mei­ne Entchen 
  • Tas­te 4: Backe Backe Kuchen 

Benö­tig­te Bauteile:

  • Laut­spre­cher
  • Tas­ten­pad
  • Lei­tungs­dräh­te

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

So klingt es: (die Musiker*innen mögen mir verzeichen)

Defi­nie­re die ➨Arrays für die Fre­quen­zen der Töne und die Län­ge der Töne in Millisekunden.

Hier fin­dest du eine ➨Über­sicht (exter­ner Link, abge­ru­fen am 21.11.2020) über die Frequenzen.

// wird für switch ... case benötigt 
# include <stdio.h> 

// 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“ 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 muss vor­han­den sein, bleibt aber leer.

void setup()
{
  // bleibt leer, es wird ein analoger Pin abgefragt
}

Ver­wen­de die Funk­ti­on ➨Tas­ter­ab­fra­ge.

int Tasterabfrage()
{
  int Analogwert = analogRead(A0);
  delay(200);
  Serial.println(Analogwert);

  /* für die Abfrage von Wertebereichen muss
     #include <stdio.h> eingebunden werden
     A0 gibt je nach Taster einen Wert aus
     über den Seriellen Monitor wird dieser Wert angezeigt
     und kann dann eventuell angepasst werden
  */
  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ück­te Tas­ter abge­fragt und in einer for-Schleife die Ton­fol­ge mit den dazu­ge­hö­ri­gen Ton­län­gen gespielt.

Die for-schleife wird vom ers­ten bis zum letz­ten Ele­ment des Arrays ausgeführt.

size­of() bestimmt die Anzahl der Ele­men­te eines Arrays. Hier­zu wird zunächst der Spei­cher­platz in Bytes bestimmt den alle Ele­men­te als Sum­me bele­gen, anschlie­ßend wird die­ser Wert durch den vom ers­ten Ele­ment beleg­ten Spei­cher­platz geteilt.

Wei­te­re Informationen

void loop()
{
  Taster = Tasterabfrage();
  if (Taster == 1)
  {
    // Tonleiter spielen
    for (int i = 0; i < sizeof(Tonleiter) / sizeof(Tonleiter[0]); i ++)
    {
      tone(LAUTSPRECHER, Tonleiter[i]);
      delay(TonlaengeTonleiter[i]);
      delay(10);
      noTone(LAUTSPRECHER);
    }
  }
   
  // Bruder Jakob spielen
  if (Taster == 2)
  {
    // Bruder Jakob
    for (int i = 0; i < sizeof(BruderJakob) / sizeof(BruderJakob[0]); i ++)
    {
      tone(LAUTSPRECHER, BruderJakob[i]);
      delay(TonlaengeBruderJakob[i]);
      delay(10);
      noTone(LAUTSPRECHER);
    }
  }
  
  if (Taster == 3)
  {
    // 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);
    }
  }

  // backe backe Kuchen spielen
  if (Taster == 4)
  {
    // 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);
    }
  }
}


Ver­wand­te Aufgaben:


Letzte Aktualisierung: 22. Nov 2020 @ 14:56