Debouncing einer Tastatur - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Debouncing einer Tastatur (/Thread-Debouncing-einer-Tastatur) |
Debouncing einer Tastatur - dehmelp - 21.10.2015 12:08 Moin. Ich hab ein nerviges Problem. In meinem Experiment müssen die Teilnehmer mit Tastendrücken auf der Tastatur reagieren...Sie müssen die Sequenz L,K,J genau in dieser Reihenfolge drücken. Alle anderen Kombinationen sollen ein Fehlerbild anzeigen. Meine Versuche "funktionieren" solange die highlight execution aktiviert ist. In normaler Geschwindigkeit klappt es nicht. Scheint also so als würde der erste Tastendruck (L) zu lange ausgelesen werden, so das das Programm denkt der Teilnehmer reagiert schon auf den zweiten Reiz. Und das falsch....Das VI ist angehängt, also falls jemand eine Idee hat. Grüße, Philipp RE: Debouncing einer Tastatur - GerdW - 21.10.2015 13:09 Hallo dehmelp, anstatt mit dem Input-Funktionen rumzumachen (und das nicht besonders schön), könntest du auch einfach eine Event-Struktur und ein Schieberegister nutzen. Die Eventstruktur teilt dir mit, wann eine Taste gedrückt wurde und auch gleich, welche es war… RE: Debouncing einer Tastatur - dehmelp - 22.10.2015 09:04 Hallo Gerd. Danke für den Tipp...Hab noch nie mit ner Eventstruktur gearbeitet, daher kam ich nicht auf die Idee. Werde das gleich mal versuchen. Grüße, Philipp RE: Debouncing einer Tastatur - dehmelp - 26.10.2015 11:09 Hmm... Hatte wohl seinen Grund das ich noch nie mit ner Eventstruktur gearbeitet habe...Kann ich nämlich noch nicht. Hat jemand vielleicht ein Beispiel das in meine Richtung gehen könnte? Mein größtes (wenn auch nicht einziges Problem) ist die Definition eines Events...Schon da stockt es bei mir. Wie definiere ein Event das in drei Stufen auftreten kann??? Also Bild 1,2 oder 3. Einfach nur ein Wertewechsel als Event geht ja noch, aber wenn das Event sich auf bestimmte Werte ändert blick ich nicht durch. Grüße, Philipp RE: Debouncing einer Tastatur - NoWay - 26.10.2015 11:20 siehe hier: http://zone.ni.com/reference/de-XX/help/371361K-0113/lvhowto/cfgevents/ und hier: http://zone.ni.com/reference/de-XX/help/371361K-0113/glang/event_structure/ RE: Debouncing einer Tastatur - dehmelp - 26.10.2015 11:23 Durch die Seiten bin ich schon durch, und auch die vorgefertigten Beispiele hab ich schon versucht zu verstehen...Bis jetzt bleiben es böhmische Dörfer. RE: Debouncing einer Tastatur - NoWay - 26.10.2015 11:35 Hab dir da mal zusammengeklickt: [attachment=54392] Übe das in einem leeren VI! Wenn man etwas nicht versteht, erarbeitet man sich das häppchenweise. Erstelle eine Eventstruktur in einer While Schleife z.B., damit das Event mehr als einmal ausgeführt wird. Mit einem einfachen boolschen control und einem Anzeigeelement kannst du das dann testen. Mein Screenshot sollte eigentlich alles erklären: Wenn du auf einen Tastendruck reagieren willst, dann wählst du in der Mitte dein boolsches Element (= den Schalter) und rechts "Value Change" (=Wertänderung). WAS dann passiert programmierst du in dem entsprechenden Case der dann in deiner Eventstruktur auftaucht. Ist garnicht so schwer. Trau dich und probier es aus. Ich versichere dir, du kannst (in einem leeren VI) nichts kaputt machen Gruß, NoWay RE: Debouncing einer Tastatur - dehmelp - 26.10.2015 12:25 Hi NoWay. Schonmal Danke für deinen Tipp. Ich hab es auch Häppchenweise versucht und die Value change Einstellung funktioniert auch ein wenig so wie sie soll...Nur nicht ganz. Es muss sich nämlich nicht nur "einfach" der Wert ändern damit ein bestimmter Fall ausgeführt wird, sondern der Wert muss sich in einen bestimmten Wert ändern. Also value change von "egal" zu Bild 1 oder value cahnge von "egal" zu Bild 2 ....usw... Und den Teil schafffe ich noch nicht...Würde ich eigentlich auch einfach mit ner case Struktur machen, aber mir wurde gesagt Eventstruktur wäre da besser. Der zweite Teil ist dann das was ich schwieriger lösen kann...Das wären nämlich drei Tastendrücke nacheinander die zweite Taste kann erst nach der ersten gedrückt werden, die dritte erst nach der zweiten für jeden Tastendruck hat man maximal 1000ms Zeit falls eine der Tasten nicht der vordefinierten Reihenfolge entspricht (Oder die Reaktion zu langsam war) kommt eine Fehlermeldung. Den Teil soll ich ja eigentlich mit der Eventstruktur lösen, aber da steh ich ziemlich auf dem Schlauch wie das gehen soll. RE: Debouncing einer Tastatur - TDO - 26.10.2015 12:44 Wie Gerd schon geschrieben hat, erstellst du dir einfach ein Schieberegister an der äußeren while Schleife und schiebst da, die Zeichen rein, welche getippt wurden. Das Schieberegister kannst du bei jedem ausgelösten Event überprüfen und dementsprechend reagieren. Wenn das Event 1000ms nicht ausgelöst wird, kannst du das Schieberegister im Timeout case wieder löschen. Gruß TDO RE: Debouncing einer Tastatur - dehmelp - 27.10.2015 09:03 Hallo TDO. Also die Zeichen in ein Schieberegister zu schreiben bekomm ich hin, aber sind das dann nicht sehr viele Zeichen? Jeder Tastendruck besteht ja technisch aus hunderten "Tastendrücken"....Werden die dann alle in mein Schieberegister geschoben? Oder Kommt für einmal K drücken auch nur einmal das Signal K an? (Wenn das eh nur einmal ankommt hätte ich kein Problem, nur legen meine ersten Programmierungen nahe das es eher 100Mal ankommt. :/ ) Und die Verarbeitung in einer Eventschleife klingt super, nur kann ich das halt noch nicht... Mein Problem ist (z.B.) die Tastensequenz LKJ als eigenes Event zu definieren. Wenn ich das schaffe dann kann ich ja auch für diesen Fall einen Eventcase schreiben. Nur wie geht das??? Grüße, Philipp |