Lektion 14 – Melodie

Nach so viel Arbeit sollte man das Feiern nicht vergessen. Dafür brauchen wir jetzt etwas Musik!

Um einen Ton zu spielen, muss man Schallwellen erzeugen. Wenn man auf eine Trommel schlägt, versetzt man das Trommelfell in Schwingung. Diese Schwingung erzeugt Schallwellen, die über die Luft übertragen und von uns gehört werden können. Lautsprecher erzeugen Schwingungen durch elektrische Signale. Wir benutzen hierzu Piezo-Lautsprecher. Diese kann man übrigens sehr gut aus quietschendem Spielzeug oder Melodie-Grußkarten ausbauen.

Benötigte Bauteile

Bauteile Piezo Lautsprecher

Schaltung

Bauplan Piezo Lautsprecher

Wenn du einen anderen Piezo-Lautsprecher hast, kannst du natürlich auch diesen verwenden (3b).

Wie bringen wir den Piezo nun zum klingen? Fangen wir wieder mit dem Blink-Beispiel-Code an:

int ledPin = 9;

void setup(){
  pinMode(ledPin,OUTPUT);
}

void loop(){
  digitalWrite(ledPin, HIGH);
  delay(200);
  digitalWrite(ledPin, LOW);
  delay(200);
}

Hm, wenn man genau hinhört, nimmt man ein sich wiederholendes Knacken wahr, oder? Das wäre jetzt eine sehr langsame Schwingung. Wir brauchen also eine schnellere Schwingung. Lass uns die Wartezeit der delays verringern:

int ledPin = 9;

void setup(){
  pinMode(ledPin,OUTPUT);
}

void loop(){
  digitalWrite(ledPin, HIGH);
  delay(2);
  digitalWrite(ledPin, LOW);
  delay(2);
}

Schon etwas besser. Durch das Verringern der Wartezeit haben wir die Frequenz (also die Wiederholung von An und Aus) erhöht.

Erhöht? Wir haben sie doch verringert.
Gutes Argument, aber die Frequenz wird immer pro Zeit gerechnet. Übrigens: Was Meter für Entfernungen ist, ist Hz (Hertz) für die Frequenz – eine Einheit. Sie ist nach dem Physiker Heinrich Hertz benannt.
Wenn wir 10 Wiederholungen pro Sekunde haben, ist die Frequenz 10/1s = 10 Hz. Haben wir 100 Wiederholungen ist die Frequenz 100/1s = 100 Hz, also höher. Je höher also die Frequenz, desto höher der Ton. Probieren wir das aus:

int ledPin = 9;

void setup(){
  pinMode(ledPin,OUTPUT);
}

void loop(){
  digitalWrite(ledPin, HIGH);
  delay(1);
  digitalWrite(ledPin, LOW);
  delay(1);
}

Und noch etwas tiefer:

int ledPin = 9;

void setup(){
  pinMode(ledPin,OUTPUT);
}

void loop(){
  digitalWrite(ledPin, HIGH);
  delay(4);
  digitalWrite(ledPin, LOW);
  delay(4);
}

Super. Ich würde sagen, das probieren wir jetzt hintereinander. Damit wir aber auch den Unterschied hören, muss jede Frequenz ein paar mal wiederholt werden. Das machen wir wieder mit der for-Schleife:

int ledPin = 9;

void setup(){
  pinMode(ledPin,OUTPUT);
}

void loop(){
  for (int wiederholungen=0;wiederholungen<=100;wiederholungen=wiederholungen+1){
    digitalWrite(ledPin, HIGH);
    delay(1);
    digitalWrite(ledPin, LOW);
    delay(1);
  }

  for (int wiederholungen=0;wiederholungen<=100;wiederholungen=wiederholungen+1){
    digitalWrite(ledPin, HIGH);
    delay(2);
    digitalWrite(ledPin, LOW);
    delay(2);
  }

  for (int wiederholungen=0;wiederholungen<=100;wiederholungen=wiederholungen+1){
    digitalWrite(ledPin, HIGH);
    delay(4);
    digitalWrite(ledPin, LOW);
    delay(4);
  }
}

Klingt gut? Auf jeden Fall haben wir jetzt schon mal verstanden, wie das mit dem Tonerzeugen funktioniert.

Damit wir aber nicht jedes Mal so viel schreiben müssen, hat Arduino einen extra Befehl, um Töne zu erzeugen:

tone(Pin, Tonhöhe);

Zwei Parameter bekommt der Befehl zugewiesen. Der Pin, an dem der Lautsprecher angeschlossen ist und die Tonhöhe als Frequenzwert. Dazu kommt noch ein weiterer wichtiger Befehl

noTone(Pin);

Dieser Befehl stoppt den Ton an dem übergebenen Pin. Übrigens, wenn wir den Befehl tone() benutzen, brauchen wir den Pin im Setup nicht mit pinMode als OUTPUT anlegen.

So, jetzt probieren wir das gleich mal aus:

void setup() {

}

void loop() {
    tone(9, 440);
    delay(500);
    noTone(9);
    delay(500);
}

Die Frequenz 440 Herz entspricht dem so genannten Kammerton. Wenn du mehr darüber erfahren willst, lies hier mal weiter: Kammerton
Andere Frequenzen findest du auch im Internet: Frequenzen der gleichstufigen Stimmung

Spielen wir eine Melodie:

void setup() {

}

void loop() {
    tone(9, 262);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 294);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 330);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 349);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 392);
    delay(400);    
    noTone(9);
    delay(200);
    
    tone(9, 392);
    delay(400);    
    noTone(9);
    delay(2000);
}

So, und jetzt kannst Du das Lied zu Ende programmieren. Versuch es wieder zuerst allein.

Lösung

void setup() {

}

void loop() {
    tone(9, 262);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 294);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 330);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 349);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 392);
    delay(400);    
    noTone(9);
    delay(400);
    
    tone(9, 392);
    delay(400);    
    noTone(9);
    delay(400);
    
    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);

    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);

    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);

    tone(9, 392);
    delay(800);    
    noTone(9);
    delay(800);
    
    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);

    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);

    tone(9, 440);
    delay(200);
    noTone(9);
    delay(200);

    tone(9, 392);
    delay(800);    
    noTone(9);
    delay(800);    
    
    tone(9, 349);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 349);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 349);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 349);
    delay(200);
    noTone(9);
    delay(200);
    
    tone(9, 330);
    delay(400);    
    noTone(9);
    delay(400);
    
    tone(9, 330);
    delay(400);    
    noTone(9);
    delay(400); 
    
    tone(9, 392);
    delay(200);
    noTone(9);
    delay(200);   
    
    tone(9, 392);
    delay(200);
    noTone(9);
    delay(200);   
    
    tone(9, 392);
    delay(200);
    noTone(9);
    delay(200);    
    
    tone(9, 392);
    delay(200);
    noTone(9);
    delay(200); 
    
    tone(9, 262);
    delay(800);
    noTone(9);
    delay(800);
}

Titelbild von Dennis Skley, CC-BY-ND

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

8 thoughts on “Lektion 14 – Melodie

  1. weis jemand rat ich konnte keinen fehler denn es sollte immer einen zon und eine led schalten aber nach der fünften kamm immer erst die zweite und dan die sechste un siebste danke schon mal im voraus
    und zwischen der sechs und der sieben keine pause macht obwohl ivh eine eingebaut gabeconst int LED_1 = 11; // uP Ausgang an welchem die LED1 angeschlossen ist.
    const int LED_2 = 10;
    const int LED_3 = 9;
    const int LED_4 = 7;
    const int LED_5 = 6;
    const int LED_6 = 2;
    const int LED_7 = 8;
    const int piezo = 12;
    int xloop = 0;
    void setup() {
    // put your setup code here, to run once:
    pinMode(LED_1, OUTPUT);
    pinMode(LED_2, OUTPUT);
    pinMode(LED_3, OUTPUT);
    pinMode(LED_4, OUTPUT);
    pinMode(LED_5, OUTPUT);
    pinMode(LED_6, OUTPUT);
    pinMode(LED_7, OUTPUT);
    pinMode(piezo, OUTPUT);
    digitalWrite(LED_1, HIGH); // LED minus nach GND (Low) schalten damit sie leuchten
    digitalWrite(LED_2, HIGH); // LED minus nach GND (Low) schalten damit sie leuchten
    digitalWrite(LED_3, HIGH); // LED minus nach GND (Low) schalten damit sie leuchten
    digitalWrite(LED_4, HIGH); // LED minus nach GND (Low) schalten damit sie leuchten
    digitalWrite(LED_5, HIGH); // LED minus nach GND (Low) schalten damit sie leuchten
    digitalWrite(LED_6, HIGH); // LED minus nach GND (Low) schalten damit sie leuchten
    digitalWrite(LED_7, HIGH); // LED minus nach GND (Low) schalten damit sie leuchten
    digitalWrite(piezo, HIGH); // piezo aus
    }

    void loop() {
    // put your main code here, to run repeatedly:
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, HIGH); // schalte led 1 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, HIGH); // schalte led 2 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, HIGH); // schalte led 3 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, HIGH); // schalte led 4 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_5, HIGH); // schalte led 5 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_6, HIGH); // schalte led 6 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_7, HIGH); // schalte led 7 aus
    //1
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, HIGH); // schalte led 1 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, LOW); // schalte led 1 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    //2
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, HIGH); //schalte led 1 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, HIGH); //schalte led 2 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, LOW); //schalte led 1 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, LOW); //schalte led 2 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000);
    //3
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, HIGH); //schalte led 1 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, HIGH); //schalte led 2 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, HIGH); //schalte led 3 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, LOW); //schalte led 1 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, LOW); //schalte led 2 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, LOW); //schalte led 3 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    //4
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, HIGH); //schalte led 1 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, HIGH); //schalte led 2 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, HIGH); //schalte led 3 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, HIGH); //schalte led 4 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, LOW); //schalte led 1 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, LOW); //schalte led 2 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, LOW); //schalte led 3 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, LOW); //schalte led 4 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    //5
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, HIGH); //schalte led 1 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, HIGH); //schalte led 2 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, HIGH); //schalte led 3 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, HIGH); //schalte led 4 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_5, HIGH); //schalte led 5 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, LOW); //schalte led 1 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, LOW); //schalte led 2 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, LOW); //schalte led 3 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, LOW); //schalte led 4 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_5, LOW); //schalte led 5 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    //6
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, HIGH); //schalte led 1 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, HIGH); //schalte led 2 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, HIGH); //schalte led 3 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, HIGH); //schalte led 4 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_5, HIGH); //schalte led 5 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_6, HIGH); //schalte led 6 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, LOW); //schalte led 1 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, LOW); //schalte led 2 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, HIGH); //schalte led 3 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, HIGH); //schalte led 4 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_5, HIGH); //schalte led 5 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_6, HIGH); //schalte led 6 aus
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000);
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    //7
    digitalWrite(LED_1, LOW); //schalte led 1 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, LOW); //schalte led 2 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, LOW); //schalte led 3 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, LOW); //schalte led 4 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_5, LOW); //schalte led 5 an
    for (xloop=500; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_6, LOW); //schalte led 6 an
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_7, LOW); //schalte led 7 an
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    delay (2000); // wartezeit von zwei sekunden
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_1, LOW); //schalte led 1 aus
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_2, LOW); //schalte led 2 aus
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_3, LOW); //schalte led 3 aus
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_4, LOW); //schalte led 4 aus
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_5, LOW); //schalte led 5 aus
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_6, LOW); //schalte led 6 aus
    for (xloop=1000; xloop>100; xloop=xloop-7)
    {
    tone (piezo, xloop*20);
    delay(1); // wait for a second
    }
    digitalWrite(LED_7, LOW); //schalte led 7 aus
    delay (2000); // wartezeit von zwei sekunden

    }

    1. Hallo ratlos,

      ich glaube, du musst dir noch mal ansehen, wann du LEDs ein und ausschaltest. Ich schlage vor, du schaltest die spezielle LED erst an, spielst dann den Ton und dann schaltest du sie wieder aus:

      digitalWrite(LED_1, LOW); // schalte led 1 an
      for (xloop = 500; xloop > 100; xloop = xloop - 7)
      {
      tone (piezo, xloop * 20);
      delay(1); // wait for a second
      }
      digitalWrite(LED_1, HIGH); // schalte led 1 aus

      Und geh den Code noch mal Stück für Stück durch. Ich glaube, du bist mit den LED-Namen etwas durcheinander gekommen.

      Viel Glück dabei und liebe Grüße

      Stefan

    2. wow was ein knortz erinnert mich an meine anfänge vor nem knappen monat… also led auf low schalten und so ich weis ja net -.-` … xloop für die frequenz du spielst also immer den gleichen ton?
      und delay(1)// wait for a second ^^ wohl etwas zuviel copy paste he…
      das proplem ist bei so langen sich wiederholenden pattern man kommt so schnell durch einander und verliert die übersicht wenn man einen fehler sucht(kenn das noch zu gut glaub mir)
      also ich würd das mitlerweile etwa so lösen:
      „…siehe oben…“
      void setup()
      {
      „…siehe oben…“
      }
      int led[7]={LED_1, LED_2 ,LED_3, LED_4, LED_5, LED_6, LED_7};
      byte takte=0;
      byte i;

      void freq500(){
      for (xloop=500; xloop>100; xloop=xloop-7)
      {
      tone (piezo, xloop*20);
      delay(1);
      }}

      void freq1000(){
      for (xloop=1000; xloop>100; xloop=xloop-7)
      {
      tone (piezo, xloop*20);
      delay(1);
      }}

      led500(){
      digitalWrite(led[i],LOW);
      freq500();
      digitalWrite(led[i],HIGH);
      }

      led1000(){
      digitalWrite(led[i],LOW);
      freq1000();
      digitalWrite(led[i],HIGH);
      }

      void loop()
      {
      for(i=0,i<=6,i++){
      if (takte „siehe oben“){
      led1000();}
      takte++;
      if(takte=“ende+1″){
      takte=0;
      i=0;
      delay(2000);}
      }
      da ichs mal schnell hier im kommentar feld geschrieben hab hoff ich mal das ich keine {} usw vergessen hab… is mir noch aufgefallen das du irgendwann doch die frequenz änderst hab ich noch mit rein genommen aber die stelle zu zählen war mir dann doch etwas zuviel sollte aber kann eingefügt werden.

      ich weis der kommentar is sicher eh outdated mitlerweile aber mir kann sowas doch trotzdem spass machen,
      wer mag kann den code ja ma testen und bescheid geben wie er funzt.
      MfG
      Raze

  2. Ich möchte einen Ton nur dann abspielen, wenn eine bestimmte LED leuchtet, ansonsten soll der Ton nicht erklingen.
    Wie schalte ich das??

  3. Ein fehlender Buchstabe mit großer Wirkung:
    „Die Einheit der Frequenz wird Herz (1Hz = 1/s) genannt..“

    Vorschlag für diesen Abschnitt::
    Die Einheit Hz (Hertz) der Frequenz ist nach dem deutschen Physiker Heinrich Hertz benannt. Wenn wir also 10 Wiederholungen pro Sekunde haben, ist die Frequenz 10/1s = 10 Hz. Haben wir 100 Wiederholungen ist die Frequenz 100/1s = 100 Hz, also höher. Je höher also die Frequenz, desto höher der Ton.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.