ich möchte mit auf einem PIN meines Leonardo ein Ton ausgeben, parallel dazu soll eine LED leuchten.
Beides soll x Sekunden als Benachrichtigung bei bestimmten Events ausgegeben werden.
Als Ausgabe des Tons verwende ich einen Piezo an PIN 12, die LED ist an PIN 13.
Leider schaltet die LED aber immer sofort wieder ab, wo ist mein Fehler?
Ich hab folgendes probiert
// init
int speakerPIN =12;
int ledPIN = 13;
int signalTime = 5000;
// void setup() ...
// void loop() ...
tone(speakerPIN, 2000, signalTime);
digitalWrite(ledPIN, HIGH);
delay(signalTime);
digitalWrite(ledPIN, LOW);
Hmm, gute Frage.
Warum sollte ich denn einen PWM-Port nehmen, hab in der Doku zu tone() nix dahingehend gefunden ...
tone() schaltet doch den DigitalOut nur ein und aus und macht keine PWM?
Aber auch der Tausch der beiden Ports bringt keinen Unterschied zu vorher.
Also Status unverändert.
Merkwürdig.
Welche Arduino-Software Version verwendest Du?
In den Release Notes http://arduino.cc/en/Main/ReleaseNotes steht zur Version ARDUINO 1.0.2 ausdrücklich drin: Fix for tone() on the Leonardo. (Shigeru Kanemoto)
Bist Du vielleicht noch auf einer älteren Arduino-Version?
Oder ist das ein Ausschnitt aus einem größeren Programm, dem der RAM-Speicher ausgegangen ist und das deshalb nicht mehr funktioniert?
@Serenifly:
Was ja passen würde, die Ausgabe von tone() funktioniert ja problemlos, nur die parallele Ansteuerung einer LED auf einem DigitalOut-PIN leider nicht.
Dirk
Wegen Überschneidung als Nachtrag @jurs:
Software ist 1.0.5
Ja, ist ein Ausschnitt aus einem größeren Sketch.
Aber es funktioniert eben auch im "kleinen", also minimierten Code nicht.
tone() tut wie soll, parallele Ansteuerung einer LED lässt diese nur kurz "aufblinken" und nicht die gewünschte Zeit anbleiben.
dischneider:
Aber es funktioniert eben auch im "kleinen", also minimierten Code nicht.
tone() tut wie soll, parallele Ansteuerung einer LED lässt diese nur kurz "aufblinken" und nicht die gewünschte Zeit anbleiben.
Und bei der LED ist auch nicht der Vorwiderstand komplett falsch berechnet, so dass sie beim Aufblinken mehr als 40mA Strom ziehen könnte und der Atmega wegen Überstrom an diesem Pin instabil arbeitet?
Nein, der Vorwiderstand passt.
220 Ohm begrenzt den Strom auf max 27mA, Eigenschaften der LED vernachlässigt.
Ohne tone() tut sie auch wie gewünscht.
Hatte auch schon einen Schalttransistor testweise zwischengesetzt, keine Änderung.
Das liegt daran, dass die tone() Funktion im Hintergrund abläuft.
Du schaltest den Ton ein und sozusagen gleichzeitig die LED, der Ton ist 5s an und die delay Funktion läßt die LED nach 5s, dann gleichzeitig mit dem Ton ausgehen.
Gib mal statt delay(signalTime); delay(signalTime + 1000); ein und du wirst sehen, dass die LED 1s anbleibt.
Und das hat auch nichts mit dem Leonardo zu tun...