Go Down

Topic: Zeitverzögerte Auswertung von Eingängen? (Read 1 time) 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().
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

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.
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Quelle: Jean-Paul Sartre

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"
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Quelle: Jean-Paul Sartre

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)

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.
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Quelle: Jean-Paul Sartre

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.

Tommy56

Bei mehreren Eingängen wohl als Array zu programmieren. Da fehlt mir noch das Wissen, das fehlerfrei umzusetzen.
Da hilft nur lernen, aber nicht alles auf einmal, sondern schrittweise. Erst mal einen Sensor sauber verarbeiten.

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

ElEspanol

#14
Jun 16, 2019, 08:35 pm Last Edit: Jun 16, 2019, 08:36 pm by ElEspanol
Aber das eigentliche Problem besteht noch?
Du wolltest doch einen Eingang einlesen, an dem das Signal jeweils länger als 100ms durchgehend angelegen sein muss, bevor du die entsprechende bool variable änderst?

Oder hat sich da mit den vielen Türen die Problemstellung geändert?


Go Up