Tasten betaetigungen in einem Zeitraum zaehlen. Z.b. 3 x in 2 Sekunden. gpiozero, Python3

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Tasten betaetigungen in einem Zeitraum zaehlen. Z.b. 3 x in 2 Sekunden. gpiozero, Python3? Schau mal ob du hier fündig wirst!

  • Hi linusg,

    ja, du hast recht aber ich hatte auch eher an einem Codeschnipsel als Insperation gedacht als an fertig geschriebenen Code. Na ja, hier mal mein Versuch. Die Idee ist, Taster 1 wird gedrueckt, dann sollte eine while Schleife 2 Sekunden warten und die Klick-Anzahl des Taster hochzuzaehlen um dann ueber eine zweite if-Schleife die entsprechende Anweisung auszufuehren. Leider geht der Motor schon beim ersten Tastendruck von taster_start an. Deine Vorschlaege mit counter und flags habe ich mal in Google geschmissen, konnte ich aber nicht umsaetzen, bzw. bei flags habe ich nicht mal begriffen worum es geht.

    Hoffe du hast da eine Idee wenn du noch magst.

    Frohe Weihnachten und einen guten Rutsch!

    gutschy

  • Okay, also nochmal zur Klarstellung: Du möchtest zählen, wie oft ein Button in einem Zeitraum von z.B. zwei oder drei Sekunden gedrückt und losgelassen wird. Richtig? Allgemein solltest du leicht anfangen, dein Code ist schon etwas unübersichtlich und komplex. Versuche es doch erst einmal mit dem einen Button und füge dann erst die anderen Funktionen hinzu.

    Ungetestet:

  • Hi linusg,

    hab dein Skript jetzt mal probelaufen lassen, brachte leider eine Fehlermeldung.

    Und es gab keine Hochzaehlen von n_pressed.

    Code
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds
    Button was pressed for 0 times within the last 2 seconds

    Immerhin loeste der Button die Fehlermeldung aus. Ich kann sowieso nur die letzte Zeile einigermassen zuordnen.

    Code
    File "i_linus_button.py", line 11, in handle_button_start
        n_pressed += 1
    UnboundLocalError: local variable 'n_pressed' referenced before assignment

    Aber Variablen in Python muessen doch gar nicht erst referenziert werden, oder? Bzw. habe ich n_pressed auch mal auf Global gesetzt, da brachte aber die gleiche Fehlermeldung.

  • Nope, wie gesagt, die gleiche Fehlermeldung.

  • Ahh, jetzt klappt es. Um die Theorie aus Buechern auch verwerten zu koennen muesste ich mich wirklich oefter damit beschaeftigen. Und bei Stackoverflow steht es ja auch richtig, habe es jetzt erst beim zweiten mal gerafft.

    Besten Dank soweit, Linus!

    Dir einen guten Rutsch.

  • Ich persönlich würde das so machen:

    ungetestet!

  • - Iteratoren sind in Python bereits in Klassen implementiert. Also sollte man sie auch nutzen (sofern nur hochgezählt werden soll).

    - was auch immer _ (Klasse) bedeutet, das gehört da nicht hin auch # EOF

  • ...das macht das ganze aber IMHO wieder unnötig kompliziert, da nicht nur hoch gezählt wird sondern der counter auch wieder zurückgesetzt werden muss. Zudem ist der Aufruf next(counter) wie ich finde irreführend, kann in der print Ausgabe von Linus 's Script so auch nicht verwendet werden da dann automatisch hoch gezählt wird und somit der tatsächliche Wert verfälscht wird...

    _ deshalb weil es über collections bereits Counter gibt, also kein Konflikt entstehen soll. Und # EOF ist ein Kommentar, was ich immer setze um Anfängern zu verdeutlichen dass danach nichts mehr kommt

  • Tja Leute, kann ich mich ja nur bedanken das hier so intensiv ueber die Loesung meiner Probleme nachgedacht wird. Leider ist dieses Klassen Ding der Hauptgrund warum ich mal mit C angefangen bin. Klassen sind fuer mich echt schlecht nachzuvollziehen, obwohl ich ihren Sinn auch schon mal umrissen hatte. (Das mit den Vererbungen finde sogar ich praktisch.) Leider sind meine Python Anwendungen zumindest im Moment noch sehr sporadisch. Da halte ich das Anwenden von Klassen fuer uebertrieben, ich halte mich da an den Vorschlag von linusg, den kriege ich auch irgendwie in mein Skript eingebaut, hoffe ich mal.

    Aber nochmal Danke, nur noetigen mich eure Beispiele wirklich dazu mich nochmal in das Konzept der Klassen einzuarbeiten, was ich frueher oder spaeter auf jeden Fall noch mal machen werde, nur nicht diese Woche.;) Gibt noch soviel was ich erledigen will.||

    linusg, meigrafd und bootsmann ich wuenschen euch einen guten Rutsch.

    gutschy

    P.S. bootsmann, meinst du damit den Bernhardiner?

  • meigrafd - da hast du ja aus meinem Gewurschtel doch noch schönen Python Code gemacht :thumbup:

    Ich weiß, die _Counter Klasse ist eine allgemeine, aber für diesen simplen Fall würde ich sie doch noch stark vereinfachen, und zu einer Namenskollision sollte es hier wohl auch nicht kommen. Ansonsten: from foo import Bar as FooBar ;)

    Ob man das counter.value = 0 noch in eine Methode counter.reset() oder tatsächlich counter.set(0) packt ist wohl Geschmackssache. Aber es erfüllt wohl seinen Zweck.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!