Verständnis - noTone()

Hallo, ich beschäftige mich seit ein paar Monaten mit Arduino und bin nun auf die Funktion tone() bzw noTone() gestoßen.
Mit tone() komme ich klar nur noTone() verstehe ich noch nicht ganz.
Nach der Beschreiben ist diese wichtig um Töne aus mehreren Pins spielen zu können, da tone() immer nur auf einen Pin angewendet werden kann.
Nun hab ich folgendes ausprobiert:
1)
....
tone(2, 261, 2000); //c wird gespielt für 2 sek
tone(3, 294, 2000); //kein Ton wird gespielt
...
Dies habe ich zunächst auch erwartet, da ja tone() nur auf einen Pin angewendet werden kann.
2)
....
tone(2,261, 2000); //kein Ton wird gespielt
noTone(2);
tone(3, 294, 2000); // kein Ton wird gespielt
noTone(3);
....
Da war ich nun doch verwundert, da die noTone() Funktion (nach der Beschreibung) doch dazu da sei Töne aus mehreren Pins spielen zu können.
3)
....
tone(2, 261, 2000); // c wird für 2sek gespielt, dann
delay(3000);
noTone(2);
tone(3, 294, 2000); // 1sek Pause, dann d für 2sek
...
Auch hier war ich verwundert, aber immerhin wurde jetzt etwas gespielt.
4)
....
tone(2, 261, 2000); // c wird für 2sek gespielt, dann
delay(3000);
tone(3, 294, 2000); // 1sek Pause, dann d für 2sek
....
Ab diesem Beispiel fragte ich mich wozu die noTone() Funktion nun wirklich gut ist, da anscheinend auch ohne diese Töne aus mehreren Pins gespielt werden können.

Kann mich jemand über noTone() aufklären?

Grüße leb1!

tone() erzeugt den Ton über die angegebene Dauer. Dies erfolgt jedoch im Hintergrund, vergleichbar mit der PWM Erzeugung bei analogWrite(). Dein Sketch läuft demzufolge sofort weiter. Wenn Du nun in der nächsten Programmzeile sofort ein noTone() hast, sollte klar sein warum nichts zu hören ist.
noTone() wird gebraucht, wenn Du z.B. die Tonausgabe vorzeitig beenden willst. Und da ja tone() immer nur mit einem Pin arbeiten kann, sollte noTone() bei jedem Pinwechsel angegeben werden. Weil es ja sein kann, dass im Hintergrund noch eine Tonausgabe erfolgt.

Jetzt sollte Dir das Verhalten Deiner Testsketche klar sein.

Ahhhh alles klar, hätte gedacht dass tone() für 2 sek ausgeführt wird und erst dann der sketch weiter läuft... , danke dir!!! :slight_smile:

Grüße leb1!!