Go Down

Topic: Zeitverzögerte Auswertung von Eingängen? (Read 663 times) previous topic - next topic

4711

Hallo Gemeinde,

mich beschäftigt gerade das verhindern von Signalflattern. D.h. ein Näherungsschalter schaltet unkontrolliert.

Ich möchte den Eingang mit einem Delay belegen, was ein und aus betrifft.

100ms ein = ein, 100ms aus = aus, Schaltzustände dazwischen ignorieren.

Geht das nur über milis() oder gibt es einen einfacheren Weg?

Danke! BG

ElEspanol


agmue

Geht das nur über milis() oder gibt es einen einfacheren Weg?
Ein Beispiel in diesem Thema am Anfang von loop().
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

michael_x

Wenn es sonst keine Gründe gibt,  warum loop() schneller als alle paar ms sein sollte, kannst du auch mit delay(5) einfach entprellen.
Quote
ein Näherungsschalter schaltet unkontrolliert
Evtl. auch eher ein Fall für eine Hysterese. Hängt wohl auch von deinem "unkontrolliert" ab.
Wenn du wirklich rauskriegen willst,  dass ein Signal x msec unverändert bleibt, ist
if (millis()-prev > x)
das einfachste.

combie

#4
Jun 15, 2019, 09:37 pm Last Edit: Jun 15, 2019, 09:37 pm by combie
Quote
Geht das nur über milis()
Ja, oder eine beliebige andere Zeitbasis.

Quote
oder gibt es einen einfacheren Weg?
Das ist ein einfacher Weg.
Der einfachste.

Gib übrigens einige Libs, welche sowas abhandeln.
Nobody is perfect!
(und selbst der nicht zu 100%)

4711

OK, danke für euren Input!!

Welche Libs wären das?

combie

#6
Jun 16, 2019, 11:40 am Last Edit: Jun 16, 2019, 12:12 pm by combie
Welche Libs wären das?
z.B. meine
Hier mal ein Entprellbeispiel mit 20ms Zeitfenster.

Für andere Libs mache ich keine Werbung.

Aber du kannst ja selber suchen, denn du bist ja nicht der/die/das Erste mit einem solchen Problem.
Suchtipp: "Arduino debounce"
Oder: "Arduino entprellen"
Nobody is perfect!
(und selbst der nicht zu 100%)

noiasca

oder ohne Library, einfach gem. Beispiel in der IDE:

02 Digital | Debounce


DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

4711

Danke für die Infos, aber mit höherer Programmiersprache stehe ich auf Kriegsfuß.
D.h. das Beispiel kann ich nicht lesen.

was nun "02 Digital | Debounce" bedeutet, erschließt sich mir auch nicht ??

Debounce und Google bringen mich zu https://github.com/thomasfredericks/Bounce2/wiki
mal sehen ob ich das kapiere.

Tommy56

was nun "02 Digital | Debounce" bedeutet, erschließt sich mir auch nicht ??
Einfach komplett lesen und durchklicken.

In der IDE: File/Datei --> Examples/Beispiele --> 02. Digital --> Debounce

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

In der IDE: File/Datei --> Examples/Beispiele --> 02. Digital --> Debounce
Gefunden?
Verstanden?
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

combie

Quote
Danke für die Infos, aber mit höherer Programmiersprache stehe ich auf Kriegsfuß.
Es ist die Sprache, in der du deine Programme sowieso schon schreibst.
C++
OK, ein anderer Blickwinkel, aber doch die gleiche Sprache.


Quote
D.h. das Beispiel kann ich nicht lesen.
Das könntest du ändern.
Wenn du denn willst.
Würde dir einiges erleichtern, viele Türen öffnen.
Nobody is perfect!
(und selbst der nicht zu 100%)

4711

OK, kapiert was ihr meint, muss ich mir dann ansehen!

Viele Türen, ja, aber.... ich komm mit dem was ich will nicht weiter, außer wieder viele Türen und die damit verbundene Zeit zu öffnen. Solange ich mit den Basics auskommen kann, soll es dabei sein. Wenn ich Zeit finde, kann ich die nächste Türe öffen, aber in meiner mom. Situation wäre zuviel einfach zu viel.

Tommy56

Wenn ich Zeit finde, kann ich die nächste Türe öffen, aber in meiner mom. Situation wäre zuviel einfach zu viel.
Das kann auch bedeuten: Erst mit der nächsten (oder weiteren) Tür(en) kannst Du Dein Problem lösen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

4711

Schon klar.

Ich habe mir das Debounce Beispiel angesehen, viel Code. Da komme ich mit meiner Maschine wohl schon in Speicherprobleme, jetzt schon 25% verbraucht und das nur mit dem Referenzieren... k.A. ob das noch zu einem Problem wird.
Bei mehreren Eingängen wohl als Array zu programmieren. Da fehlt mir noch das Wissen, das fehlerfrei umzusetzen.

Go Up