LabVIEWForum.de - Debouncing einer Tastatur

LabVIEWForum.de

Normale Version: Debouncing einer Tastatur
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
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. Smile

Grüße,
Philipp
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…
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. Smile
Grüße,
Philipp
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
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. Sad
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 Wink

Gruß,
NoWay
Hi NoWay.
Schonmal Danke für deinen Tipp. Smile
Ich hab es auch Häppchenweise versucht und die Value change Einstellung funktioniert auch ein wenig so wie sie soll...Nur nicht ganz. Smile

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.
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
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
Seiten: 1 2 3
Referenz-URLs