- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 40

Thema: Taster mit Kondensator entprellen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    Zitat Zitat von Holomino Beitrag anzeigen
    Wenn Du kein delay() verwendet wissen möchtest, warum verwendest Du dann den oben angegebenen Code?
    https://github.com/dsyleixa/Arduino/.../ButtonClass.h
    Zeile 146
    Zeile 175
    ich schrieb doch oben: die sollen auch noch weg.
    In der Button Class sind derzeit auch noch delay(1) drin, aber auch die sollen noch raus.
    Momentan verbessern sie das Prellen zwar schon (bei Prellen innerhalb der ersten 1ms), aber dennoch nicht gut genug für die ersten 20ms, und daher wollte ich alles rausschmeißen und per Kondensatoren entprellen (siehe TO Post).

    Wenn du aber den ButtonClass Code derart verbessern kannst, dass er SOWOHL perfekt bis 20ms entprellt ALS AUCH gar keine delays mehr verwendet:
    HER DAMIT!

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    4700µF Elkos würden aber bei weitem den verfügbaren Platz überschreiten
    Das ist mir klar Aber anders .... ?

  3. #3
    HaWe
    Gast
    Zitat Zitat von Moppi Beitrag anzeigen
    Das ist mir klar Aber anders .... ?
    das wäre genau die Frage ...

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Nimm doch statt delay(x) -> delayMicroseconds(x).
    Du könntest auch mit millis() oder micros() arbeiten, bekommst ja dann die vergangene Zeit. und kannst also die Schleife immer wieder verlassen, solang eine gewisse Mindestzeit nicht vergangen ist.

    Eigentlich wartet man nur darauf, dass der Taster eine gewisse Zeit nicht gedrückt wurde, um sicher zu gehen, dass er nicht mehr gedrückt ist.
    Registriert man während dieser Wartezeit, dass der doch wieder gedrückt wurde oder ist, setzt man den Zähler zurück und wartet weiter, bis er die gewünschte Zeit eben nicht mehr gedrückt ist.
    Mit millis() oder micros() weisst Du, wieviel Zeit vergangen ist und kannst deinen Zähler entspr. anpassen, bis der irgendwann auf 0 ist; dann ist der Taster nicht mehr gedrückt.



    MfG

  5. #5
    HaWe
    Gast
    Zitat Zitat von Moppi Beitrag anzeigen
    Nimm doch statt delay(x) -> delayMicroseconds(x).
    Du könntest auch mit millis() oder micros() arbeiten, bekommst ja dann die vergangene Zeit. und kannst also die Schleife immer wieder verlassen, solang eine gewisse Mindestzeit nicht vergangen ist.

    Eigentlich wartet man nur darauf, dass der Taster eine gewisse Zeit nicht gedrückt wurde, um sicher zu gehen, dass er nicht mehr gedrückt ist.
    Registriert man während dieser Wartezeit, dass der doch wieder gedrückt wurde oder ist, setzt man den Zähler zurück und wartet weiter, bis er die gewünschte Zeit eben nicht mehr gedrückt ist.
    Mit millis() oder micros() weisst Du, wieviel Zeit vergangen ist und kannst deinen Zähler entspr. anpassen, bis der irgendwann auf 0 ist; dann ist der Taster nicht mehr gedrückt.

    MfG
    moppi,
    es geht um 20ms, die man quasi nach dem 1. Drücken abfeiern muss -
    - da ist es völlig wurscht, ob man die in microseconds oder milliseconds zählt.

    Es darf aber ÜBERHAUPT KEINE WARTEZEIT geben!

    Hast du dir mal die Mühe gemacht, den ButtonClass Code mit seiner State Machine anzusehen, für den die Entprellung gebraucht wird??

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Du wartes da auf gar nichts. Ist ja nicht notwendig. millis() abfragen, vom Zähler abziehen -> Zähler = 0? Nein, zurück, weil Taste noch gedrückt (status mitgeben: bool return x). Ist doch 0? Ja, dann zurück, weil Taste nicht mehr gedrückt (status mitgeben). Die Zeit, die da verbraucht wird, ist halt die, für die paar Befehle. Aber kein Warten in dem Sinn, dass man da so und so viele Micros() oder Millis() in einer Schleife festhängt.


    MfG

  7. #7
    HaWe
    Gast
    Zitat Zitat von Moppi Beitrag anzeigen
    Du wartes da auf gar nichts. Ist ja nicht notwendig. millis() abfragen, vom Zähler abziehen -> Zähler = 0? Nein, zurück, weil Taste noch gedrückt (status mitgeben: bool return x). Ist doch 0? Ja, dann zurück, weil Taste nicht mehr gedrückt (status mitgeben). Die Zeit, die da verbraucht wird, ist halt die, für die paar Befehle. Aber kein Warten in dem Sinn, dass man da so und so viele Micros() oder Millis() in einer Schleife festhängt.


    MfG
    Das ist mir leider zu allgemein und zu unkonkret.
    Aber wenn du wirklich die konkrete Lösung kennst, dann schreib hier mal hin, wie der Code für die ButtonClass geändert werden muss, damit man
    a) zwar einen Doppelclick und auch einen langen Buttonpress erkennt, aber
    b) schnelles Prellen bei einzelnen Buttonclicks herausgefiltert wird.
    Link: https://github.com/dsyleixa/Arduino/.../ButtonClass.h

Ähnliche Themen

  1. Taster entprellen?
    Von Ferdinand im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 18.08.2011, 22:27
  2. Probleme mit Taster entprellen
    Von Mr Bean im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 08.05.2007, 17:12
  3. Entprellen von Taster
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 10.07.2006, 10:15
  4. Taster Entprellen mit Bascom
    Von hardstyleroxx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.01.2005, 16:41
  5. Taster entprellen
    Von RCO im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 14.10.2004, 12:59

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test