attachInterrupt und Debounce

Hallo, ich bin gerade dabei für meine Bachelorarbeit einen Arduino-Code zu programmieren. Nun habe ich ein Problem mit der Kombination aus der attachInterrupt-Funktion und dem Debouncen.

Das Ziel ist über einen attachinterrupt eine Rising-Flank zu erkennen und dann eine Funktion zu starten. Das funktioniert auch super. Das Problem ist nun (wofür der Debounce ja auch gedacht ist), dass durch den unsauberen Input des Buttons diese Funktion auch beim Schalten von HIGH auf LOW ausgelöst wird und nicht nur wie gewollt beim Schalten von LOW auf HIGH. (Dies passiert einmal bei ersten Buttonpress und dann nochmal wenn man ihn z.B. eine Sekunde später wieder loslässt).

Mir ist aufgefallen, dass ich beim anfänglichen Hochschalten einen delay einbauen kann, welcher dann nach z.B. 50ms den Pin Status auf HIGH abfragt und so nur die Funktion auslöst, wenn das Signal dann passt, was den Fehler behebt. Leider ist dann dieser angesprochene Delay von 50 ms drin, was für meine Anwendung ungeeignet ist.

Gibt es eine Möglichkeit diesen delay zu umgehen oder mit einem anderen Trick das Problem zu beheben?
Ich bin für jede Hilfestellung oder Denkanstöße dankbar :slight_smile:

Keine Interrupts für Tasten, einfach pollen.

Debouncen kann man selbst machen, oder von einer Library (z.B. Bounce2) erledigen lassen.

Eine Bachelorarbeit mit delay für Timing, brauchtest du bei mir nicht abgeben.

Bitte gewöhne Dir an, auch mal einen Absatz einzufügen. Du schreibst keinen Roman, sondern eine Aufgabenstellung.

Ich empfehle mal eine ganz einfache kleine Funktion die ich grad vor zwei Tagen verbaut habe. Solltest Du ein debuonce brauchen, ist das relativ einfach im elsezweig zu lösen.

Fürn Bachelor mach mal und schreib das für Dich fertig. :wink:

Wie wäre es, nicht erst nach 50ms abzufragen. Sondern auf den ersten Pulse zu reagieren und 50ms auf keine weiteren Pulse zu reagieren.

Super, danke für die Hilfe. Die Library hab ich integriert und jetzt klappt alles wie gewünscht. :slight_smile:

Moin, sorry die Schreiblust überkam mich einfach ;), aber hast du recht. Die Funktion ist gut, habe auch so eine ähnliche geschrieben, aber weil noch vieles anderes im Code gemacht wird, arbeite ich glaube ich lieber mit der Library, damit es simpel bleibt. Danke für deine Hilfe :slight_smile:

Hi, hatte ich versucht, leider erkannte er auch beim Ausschalten noch eine Rising-Flanke durch das "Zittern". Da lag das Problem, also das er die Funktion auch beim "Ausschalten" getriggert hat, aber hat sich nun geklärt. Danke für deine Mühen :slight_smile:

Simpel wird es, wenn die Verteidigung kommt und Du erklären musst, was da warum passiert....
Aber ist ok... :wink:

Eine Verteidigung muss ich zum Glück nicht machen :smiley: