Kein onKeyPressed bei kurzem Tastendruck

  • Hi,
    ok, nachdem mein letztes Problem nur meine eigene Dummheit war, jetzt hier mal das was ich eigentlich testen wollte und wohl ein kleines Problem habe.


    Und zwar, wenn ich meinen Klingeltaster nur sehr kurz drücke, wird kein onKeyPressed ausgelöst, siehe hier:


    Code
    1. 2016-03-19 11:36:16,070 [INFO]   [doorpi.status.webserver] DoorPiWeb URL is http://doorpi:8080/
    2. 2016-03-19 11:36:16,893 [TRACE]   [doorpi.action.handler] fire Event OnKeyUp from doorpi.keyboard.from_piface asyncron
    3. 2016-03-19 11:36:16,900 [TRACE]   [doorpi.action.handler] fire Event OnKeyUp_0 from doorpi.keyboard.from_piface asyncron
    4. 2016-03-19 11:36:16,910 [DEBUG]   [doorpi.action.handler] no actions for event OnKeyUp - skip fire_event OnKeyUp from doorpi.keyboard.from_piface
    5. 2016-03-19 11:36:16,915 [TRACE]   [doorpi.action.handler] fire Event OnKeyUp_pifaceio.0 from doorpi.keyboard.from_piface asyncron
    6. 2016-03-19 11:36:16,922 [DEBUG]   [doorpi.action.handler] no actions for event OnKeyUp_0 - skip fire_event OnKeyUp_0 from doorpi.keyboard.from_piface
    7. 2016-03-19 11:36:16,935 [DEBUG]   [doorpi.action.handler] no actions for event OnKeyUp_pifaceio.0 - skip fire_event OnKeyUp_pifaceio.0 from doorpi.keyboard.from_piface
    8. 2016-03-19 11:36:18,347 [INFO]   [doorpi.status.webserver] DoorPiWeb URL is http://doorpi:8080/



    Drücke ich etwas länger, kommt onKeyPressed und die entsprechende Action wird auch ausgeführt:


    Interessant finde ich auch, dass im ersten Fall auch kein "onKeyDown" kommt, sondern nur das "onKeyUp" erkannt wird.


    Ich habe da jetzt mit der Bouncetime mal ein wenig rumgespielt, aber ich kann es aktuell nicht lösen. Was kann ich da machen?

  • Kurzes Feedback dazu noch von mir: Ich benutze ein Piface Digital 2, und das Problem kann ich auch nachstellen, wenn ich die Taster die direkt auf dem Board sind nur sehr kurz antippe (habe ich probiert um auszuschließen, dass es an meinem Taster liegt).


    Ich habe zwei Lösungsmöglichkeiten gefunden, die das Problem scheinbar umgehen können:
    1) ich hänge die Actions an EVENT_onKeyUp_X, denn das erhalten ich immer (das KeyDown und das KeyPressed wie gesagt nicht). Dann muss ich aber irgendeinen Dummy eintragen in der Section pifaceio_InputPins eintragen, sonst gibt es die Tastern scheinbar gar nicht und auch keine Events. Das habe ich jetzt so gemacht:

    Code
    1. [pifaceio_InputPins]
    2. 0 = sleep:0
    3. 1 = sleep:0


    Und dann wie gesagt:

    Code
    1. [EVENT_OnKeyUp_0]
    2. 10 = call:**701
    3. 5 = os_execute:php /usr/local/etc/DoorPi/tools/take_snapshot_doorpi.php
    4. [EVENT_OnKeyUp_1]
    5. 10 = out:Tueroeffner,1,0,5


    ODER 2) ich setze den Wert pressed_on_keydown auf False, dann kommt das KeyPressed natürlich auch, denn KeyUp kriege ich ja.


    Ich habe jetzt Möglichkeit 1) gewählt, da ich in einigen Fällen sowieso mehrere Actions an den Key hängen will. Spricht was dagegen es so zu machen oder habe ich irgendwelche Nachteile?

  • Die Möglichkeit 1 ist perspektivisch sogar besser, denn die actions direkt an den input pins werden später einmal wegfallen und durch Namen der Pins, ähnlich wie bei den Output Pins, ersetzt.
    Aber das kommt später und wird trotzdem abwärtskompatibel sein bzw. eine Konvertierung der config automatisch durchführen...


    Viel zu weit ausgeholt - kurz gesagt - Möglichkeit 1 ist besser...

  • So habe ich es auch aber von Anfang an gemacht das ganze sieht dann bei mir so aus. Doorpi meckert zwar immer das er das nicht kennt aber es geht trotzdem. Auserdem hat man es dadurch übersichtlicher da der Pin mit einem Namen definiert wird.



    Code
    1. [prodsystem_InputPins]
    2. 0 = sleep:0
    3. 1 = sleep:0
    4. 2 = sleep:0
    5. 3 = sleep:0
    6. 4 = Licht-Bewegungssensor-in
    7. 5 = Aufnahme-Bewegungssensor-in
    8. 6 = Licht-manuell
  • Ich kann das Problem mit OnKeyUp und OnKeyDown insofern bestätigen, dass es mit der Schaltung zutun hat. Ich verwende zB zum Klingeln Pin11 am GPIOs und hatte es anfangs so beschaltet:


    Kingeltaster:
    - GPIO 3.3V an Taster Pin1
    - GPIO Pin11 an Taster Pin2
    - 10kOhm an GPIO Pin11
    - 10kOhm an GPIO GRND



    Dabei hat immer nur OnKeyUp das Klingeln ausgelöst.
    Da aber ekektrische Geräte gestört haben, habe ich zwischen 3.3V und GRND sowie zwischen PIN11 und GRND jeweils noch einen 10nF Kondensator eingelötet.


    Danach funktioniert es nur noch mittels OnKeyDown. aber alle Störungen sind weg.

  • Naja, die Frage ist wie man das sieht.
    Ja, das Problem gibt es nach wie vor, aber es gibt einen funktionierenden Workaround - allerdings kann man das Event onKeyPressed quasi nicht nutzen, da es ja nicht immer kommt.


    Wie gesagt habe ich das ohne spezielle Schaltung, einfach einen Taster an einen Eingang des PiFace. Und auch mit den Onboard-Tastern des PiFace. Von daher würde ich es schon gut finden wenn man dem auf den Grund geht, denn hier funktioniert ja etwas nicht so wie es sollte.


    Ich weiß leider nicht wie man dem auf den Grund gehen könnte, aber ich biete natürlich an jegliche Informationen zu liefern die notwendig sein könnte, oder Code zu testen...

  • Hallo Zusammen,


    habe das gleiche Problem wie hier beschrieben (kein OnKeyPressed-EVENT)...


    Ich benutze die GPIO's direkt, mit einem Taster wie im Schaltbild oben zu sehen (Post 8), jedoch ohne Kondensatoren.


    Wäre super, wenn's zu dem Problem ne Lösung gibt (neben dem Workaround von Joker)...


    Gruß, moeppi

  • Hi zusammen,


    Ich hab mein DoorPi Projekt jetzt auch mal wieder aus der Schublade geholt und bin auf das gleiche Problem gestossen: Es wurde (fast) immer nur ein KeyUp Event ausgelöst. Ich hatte sogar schon angefangen, den Code umzuprogrammieren, um dann festzustellen, dass die Ursache bei mir eigentlich ganz simpel war:


    Im Gegensatz zum Schaltbild oben, arbeiten meine Taster Low-Active, d.h. ich habe Pull-Up-Widerstände an den Eingängen und ziehe beim Tasterdruck auf Masse. DoorPi sieht's standardmäßig andersrum - also habe ich der Konfiguration ein "polarity = 1" hinzugefügt und siehe da: alles funktioniert wie gewünscht!


    Vielleicht hilft das jemandem, der mit dem gleichen Problem auf diesen Thread stößt.



    Falls Joker's ursprüngliches Problem noch gilt, hätte ich noch eine Idee dazu:
    Momentan wird das Key-Event für beide Flankenänderungen ausgelöst, d.h. beim Wechsel von LOW nach HIGH und von HIGH nach LOW. Um zu erkennen, was davon passiert ist, wird anschließend geprüft, welchen Status der Input-Pin hat.
    Bei einem SEHR kurzen Tastendruck könnte es sein, dass das Event ausgelöst wurde, der Pin seinen Status aber schon wieder zurück geändert hat.
    Hier würde es wahrscheinlich helfen, zwei getrennte Callback-Funktionen für die beiden Flankenänderungen zu verwenden, dann muss die Input-Pin-Prüfung nicht mehr erfolgen.
    Allerdings zweifle ich ein bisschen an dieser Theorie, da ich denke der Tastendruck müsste wirklich extrem kurz sein. Aber man weiß ja nie...
    Deshalb kann ich, falls gewünscht, mal geänderten Code zum Testen zur Verfügung stellen.


    Grüße,
    hubsif.

  • Ich hänge mich hier auch mal mit an. Gleiches Problem sowohl an den Tastern außen, als auch an den kleinen Tastern auf dem Piface.
    Der Workaround von Joker funktioniert. Sinnvoll erscheint mir das allerdings nicht. Eigentlich müssten ja alle drei Events kommen (Down, Pressed, Up), wenn man die Taste drückt.


    Edit:


    Ich habe das in meinem Fall mal weiter getestet.


    Kurz drücken: Nur KeyUp
    Lang drücken, KeyDown und KeyPressed


    Neuer Workaround: Auf KeyUp und KeyDown Events reagieren. Da hier seit einiger Zeit sich nichts tut, werde ich das die nächsten Tage mal selbst Hand am Code anlegen.

  • Sowas. Man sollte doch öfter mal nachsehen. Ich dachte nur ich hab dieses Problem :-)
    Ich benutze im Groben auch die obige Beschaltung... heißt PIN über 10K Ohm auf Gnd und Ansteuerung über 3V3.


    EVENT_OnKeyPressed_onboardpins.16
    10 call:699
    onboardpins_keyboard
    polarity 0
    bouncetime 5000
    pressed_on_keydown True
    mode BOARD
    pull_up_down PUD_OFF


    @Joker wie hast du den Taster jetzt beschaltet und mit welchem Event arbeitest du?
    Achso... Ich benutze kein PiFace


    Gruß Peter