Hallo !
Für einen UV-Platinenbelichter habe ich die im Bild "Timer.png" gezeigte
Schaltung aus dem Internet aufgebaut. Den Code findet ihr in
"Timer.txt". Leider versuche ich mir gerade erst entsprechende
Programmierkenntnisse anzueignen. Den Anzeige-Text habe ich geändert,
soweit sogut...doch für mein Problem habe ich keine Lösung.
Grundsätzlich funktioniert die Schaltung, nur wenn ich den Start-Taster
(zu lange) gedrückt halte bzw. ungünstig betätige, wird der Eingang am
Relaiasmodul (LOW-Level-Trigger) nicht konstant LOW, dadurch ergibt sich
das im Bild "Oszi.jpg" gezeigtes Signal. Folglich oszilliert das Relais
und das Licht bleibt aus. Zeit High (5V) 116ms, Zeit Low 11,6ms.
Manchmal geht es gleich, manchmal braucht es ein paar Versuche.
Könnt ihr mir bitte helfen? Danke :-)
Liebe Ostergrüße Mike
Offensichtlich möchtest du hier etwas flankengetriggert ausführen.
Wenn der Taster vom Zustand "losgelassen" in "gedrückt" wechselt, dann
soll etwas passieren.
In deinem Programmcode reagierst du jedoch nicht auf die Flanke, osndern
auf den Zustand "ist gedrückt". Wenn du den Taster lange gedrückt
hältst, dann wird das Programm immer wieder den Zustand "ist gedrückt"
erkennen und die Aktion wiederholt ausführen.
Du musst dein Programm so erweitern, dass es den aktuellen Zustand des
Tasters mit dem letzten bekannten Zustand vergleicht. Nur wenn der
Taster vorher nicht gerdrückt war, jetzt aber gedrückt ist, dann soll
die Aktion durchgeführt werden.
Hallo Stefanus,
danke für die Antwort. Genau wie du es beschreibst, so ist es.
Kannst du mir bei dem Code helfen?
Meine Programmierkentnisse reichen hier noch nicht aus...
Ich entprelle meine Taster immer mit einen einfachen delay von 20-100ms
je nach Taster und gut.
Wird Taste A gedrückt wird Aufgabe A gemacht und dann je nachdem wie
lange das dauert einfach bissel zeit vergehen lassen fertig.
ZB
void setup()
{
pinMode(2, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(2) == LOW)
{
Augabe xyz
delay(50);
}
FERTIG
Die Seite Hängt Ganz schön oft heute ?
Kann jemand den post darüber löschen ?
Karl M. schrieb:> Nein, das ist humbug,
Aber ich dachte doch wir sind fertig.
DAVID B. schrieb:> FERTIG
Mit delay kann man doch alles erschlagen. Fertig!
Stefanus F. schrieb:> Offensichtlich möchtest du hier etwas flankengetriggert ausführen.>> Wenn der Taster vom Zustand "losgelassen" in "gedrückt" wechselt, dann> soll etwas passieren.>> In deinem Programmcode reagierst du jedoch nicht auf die Flanke, osndern> auf den Zustand "ist gedrückt". Wenn du den Taster lange gedrückt> hältst, dann wird das Programm immer wieder den Zustand "ist gedrückt"> erkennen und die Aktion wiederholt ausführen.>> Du musst dein Programm so erweitern, dass es den aktuellen Zustand des> Tasters mit dem letzten bekannten Zustand vergleicht. Nur wenn der> Taster vorher nicht gerdrückt war, jetzt aber gedrückt ist, dann soll> die Aktion durchgeführt werden.
Wie schon von Stefanus F. geschrieben, ist dies das einzig richtige
Vorgehen!
Wie das geht steht in den beiden Link, s.o.
Mit einem Delay hat das nichts zu zum.
I.A. sind Delays im Code böse.
Die Funktion liefert true zurück, wenn die Taste gerade gedrückt wurde
und nicht schon vorher gedrückt war. Außerdem wartet sie ab, bis das
Prellen der Kontakte (hoffentlich) aufgehört hat.
Alternativ kann man die Tasten regelmäßig in einem Timer-Interrupt
abfragen, dann entfällt das blockierende Warten. Ich denke, das Prinzip
ist in dem bereits empfohlenen Artikel beschrieben.