mit Python Button presses auslesen

  • Hallo miteinander!
    Mein Problem ist eigentlich nur bedingt ein elektronisch/hardwareseitiges, sondern eher ein softwareproblem.

    Ich habe an einem Pi Zero W einen Pushputton hängen. OS ist Raspbian Buster.
    Ziel ist, dass erkannt wird ob der Button einmal, zweimal oder dreimal dedrückt wurde (also schnell hintereinander, etwa in einem 2 sekündigen Zeitfenster). Je nachdem sollen später via MQTT unterschiedliche payloads gepublished werden

    Den Code (unter Verwendung von GIOPZero) habe ich zusammengebastelt:

    beim ersten drücken kommt:

    Code
    1
    2022-03-30 10:49:50.120736

    warte ich ca 4 sekunden und drücke erneut kommt

    Code
    else schleife 1

    manchmal aber auch

    Code
    else schleife 1
    1
    2022-03-30 10:53:17.870630

    manchmal kommt auch beim ersten drücken

    Code
    1
    2022-03-30 10:53:51.908925
    else schleife 1

    egal wie oft ich drücke, es kommt nie else schleife 2

    Irgendiwe haut das nicht hin. Hat jemand einen Tipp?

  • Also dass es nicht reproduzierbar ist, liegt vermutlich am bouncing, also dass bei einem Tastendruck mehrere erkannt werden. Versuch mal button = Button(16, bounce_time=0.2). Welche bounce_time du am Ende genau brauchst musst du dann austesten.

  • anderer Ansatz, zähler bei jedem schritt hochzählen und nach der Zeit ausgeben und zurücksetzen auf 0? ^^

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

  • Also dass es nicht reproduzierbar ist, liegt vermutlich am bouncing, also dass bei einem Tastendruck mehrere erkannt werden. Versuch mal button = Button(16, bounce_time=0.2). Welche bounce_time du am Ende genau brauchst musst du dann austesten.

    Danke. Trotz unterschiedlicher bounce times immer nicht alltagstauglich


    anderer Ansatz, zähler bei jedem schritt hochzählen und nach der Zeit ausgeben und zurücksetzen auf 0? ^^

    Interessanter Ansatz. Versuche ich mal. Muss mir nur zuerst eine Grundstruktur überlegen

  • Wie hast du den Schalter angebunden?

    Bei meiner rpi2 haben starke Stromverbraucher in der Nähe Geistertasten ausgelöst. Deswegen habe ich die Schalter über einen Widerstand auf High gesetzt anstatt floating. Und beim drücken gehts auf Ground

    Haupsysteme: Server: Asrock N3160ITX, Ubuntu 22.04, TvH /// DVBSky 952 /// Wohnzimmer: Nvidia Shield Pro 2019
    Nebensysteme 1: Telestar Digibit R1 mit sat-axe14 /// Wohnzimmer: Asrock N3700, Libreelec 10 /// TvH @RPI4 Server /// Gästezimmer: Corelec 19 @ Tanix TX3
    Nebensysteme 2: Server: Asrock N3455M, OpenMediaVault6, TvH, Telestar Digibit R1 /// 4 Clients: Coreelec S905X

  • Wie hast du den Schalter angebunden?

    Bei meiner rpi2 haben starke Stromverbraucher in der Nähe Geistertasten ausgelöst. Deswegen habe ich die Schalter über einen Widerstand auf High gesetzt anstatt floating. Und beim drücken gehts auf Ground

    gpiozero aktiviert standardmäßig den internen Pullup-Widerstand. Ein externer sollte also eigentlich nicht notwendig sein. Entweder war der bei dir nicht aktiviert, oder du hast wirklich einen extrem starken Verbraucher in der Nähe.

  • Wie hast du den Schalter angebunden?

    Bei meiner rpi2 haben starke Stromverbraucher in der Nähe Geistertasten ausgelöst. Deswegen habe ich die Schalter über einen Widerstand auf High gesetzt anstatt floating. Und beim drücken gehts auf Ground

    Ehrlich gesagt weiß ich das nicht mehr [ah] . Ich habe die Schaltung bereits vor jahren in ein gehäuse verbaut, dass ich nicht mehr zerstörungsfrei aufbekomme. Bislang hat sich nicht die Notwendigkeit ergeben, einen double press auszulesen, da hat ein single press gereicht.

  • hier die variante wie ich sie nach der Idee von skybird1980 zusammengenudelt habe

    Haut aber auch nicht hin. Bei nur einem press, kommt nur die printausgabe von Zeile 20
    Bei mehreren presses kommt die Ausgabe der Zeile 27 nur nach einem weiteren Drücker
    Abgesehen davon, dass er manchmal auf Drücker gar nicht reagiert

  • gpiozero aktiviert standardmäßig den internen Pullup-Widerstand. Ein externer sollte also eigentlich nicht notwendig sein. Entweder war der bei dir nicht aktiviert, oder du hast wirklich einen extrem starken Verbraucher in der Nähe.

    2 m Kabel zwischen Button und Rpi und Backofen als Verbraucher.

    Haupsysteme: Server: Asrock N3160ITX, Ubuntu 22.04, TvH /// DVBSky 952 /// Wohnzimmer: Nvidia Shield Pro 2019
    Nebensysteme 1: Telestar Digibit R1 mit sat-axe14 /// Wohnzimmer: Asrock N3700, Libreelec 10 /// TvH @RPI4 Server /// Gästezimmer: Corelec 19 @ Tanix TX3
    Nebensysteme 2: Server: Asrock N3455M, OpenMediaVault6, TvH, Telestar Digibit R1 /// 4 Clients: Coreelec S905X

  • Hilft das vieleicht, hab ich aus einem anderen Forum.

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

  • kannst das probieren ist aber nicht getestet, wenn du Probleme mit dem Bouncing hast wird das aber so nie funktionieren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!