Zeitverzögerte Auswertung von Eingängen?

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

nein. geht am einfachsten mit millis

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

Ein Beispiel in diesem Thema am Anfang von loop().

Wenn es sonst keine Gründe gibt, warum loop() schneller als alle paar ms sein sollte, kannst du auch mit delay(5) einfach entprellen.

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.

Geht das nur über milis()

Ja, oder eine beliebige andere Zeitbasis.

oder gibt es einen einfacheren Weg?

Das ist ein einfacher Weg.
Der einfachste.

Gib übrigens einige Libs, welche sowas abhandeln.

OK, danke für euren Input!!

Welche Libs wären das?

4711:
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"

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 Home · thomasfredericks/Bounce2 Wiki · GitHub
mal sehen ob ich das kapiere.

4711:
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

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.

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.

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.

4711:
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

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.

4711:
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

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?

Nein, das Problem besteht noch, verschwindet leider nicht von selbst.
Nur mit C++ kann ich jetzt nicht anfangen und die Bounced Beispiele kann ich akt. nicht umsetzen, da fehlt mir noch zuviel Knowhow.

4711:
Nein, das Problem besteht noch, verschwindet leider nicht von selbst.
Nur mit C++ kann ich jetzt nicht anfangen und die Bounced Beispiele kann ich akt. nicht umsetzen, da fehlt mir noch zuviel Knowhow.

Das ist eine unangenehme Zwickmühle....

Wie kann ich dir helfen diesem Teufelskreis zu entrinnen?

Helfen würde mir ein Beispiel, dass in standard Arduino Sprache (ich weiß, klingt blöd) geschrieben wurde und einfach einen (oder mehrere) Eingänge entprellt. Unabhängig von Schalter und LED usw. und eff.(weniger Speicher braucht) und sauber programmiert ist.
:slight_smile:

Na das Beispiel in der IDE wurde Dir doch bereits mehrfach genannt. Noch einfacher geht es nicht.

Gruß Tommy

4711:
Helfen würde mir ein Beispiel, dass in standard Arduino Sprache (ich weiß, klingt blöd) geschrieben wurde und einfach einen (oder mehrere) Eingänge entprellt. Unabhängig von Schalter und LED usw. und eff.(weniger Speicher braucht) und sauber programmiert ist.
:slight_smile:

Was nützt dir ein Beispiel, das in C++ (Standard Arduino Sprache) geschrieben ist, wenn du es nicht verstehst.
Du solltest einfach mal die vorhandenen Beispiele verwenden und damit üben, dann lernst du auch daran.