UIFlow-Multifunktionstaste

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche

Multifunktionstaste für M5StickC

Bilder-Prefix: M5-UIF-Multitaste...

Peter (peter@attraktor.org)

Der M5StickC verfügt nur über 2 Tasten, von denen sich eine auch noch ungünstig an der Seite des Gehäuses befindet. Wenn man das Gerät in ein Gehäuse einbaut ist die Taste B garnicht mehr zu erreichen. Deshalb habe ich nach einer Möglichkeit gesucht mit der Taste A mehrere Funktionen ausführen zu können. Das ist mir gelungen :)

M5-UIF-Multitaste-003.png

Dieses Programm kann 3 verschiedene Tastendrucke (oder vielleicht besser Klicks wie von der Mouse bekannt) unterscheiden:

  • normaler Klick (darf nicht zu kurz sein)
  • doppelter Klick (muss schnell hintereinander erfolgen)
  • langer Klick (>1s)

Das Programm nutzt die Möglichkeit Tasten sowohl vom Programm abfragen zu lassen, als auch die Möglichkeit Tastendrücke per Interrupt zu verarbeiten. Fraglich war, ob diese Möglichkeiten gemeinsam genutzt werden können.

Die Funktionsweise des Programmes ist folgende:

M5-UIF-Multitaste-004.png

Zuerst wird das Display gelöscht und die Aufforderung "klicken" angezeigt. Dann wartet das Programm darauf, dass eine ggf. noch gedrückte Taste losgelassen wird.

M5-UIF-Multitaste-005.png

Anschliessend wird die Variable Klick auf 0 gesetzt. In dieser Variablen wird gespeichert, welcher Tastendruck ausgelöst wurde. Dann geht das Programm in eine Schleife und verlässt diese erst wieder, wenn in Klick ein Tastendruck angezeigt wird (Klick != 0).

M5-UIF-Multitaste-006.png

Wenn ein Tastendruck erfolgt werden die beiden Interrupt-Blöcke aktiv und schreiben ggf. einen spezifiischen Wert (2 oder 3) in die Variable Klick.

M5-UIF-Multitaste-007.png

Gleichzeitig wird aber auch die programmgesteuerte Tastenabfrage aktiv. Ohne weitere Maßnahme wird immer nur ein normaler Tastendruck erkannt. Deshalb wird mit der Verarbeitung des normalen Tastendrucks gewartet, bis die Taste wieder losgelassen wurde. In der Zwischenzeit haben die beiden Interrupt-Blöcke Zeit um ggf. ihre Werte in Klick zu schreiben. Wenn der normale Tastendruck dann zur Verabeitung kommt steht also keine 0 mehr in Klick und es war kein normaler Tastendruck. Wenn aber keiner der Interrupt-Blöcke sich angesprochen fühlte steht zu diesem Zeitpunkt noch die 0 in Klick und es wird die 1 hineingeschrieben. Dadurch das Klick keine 0 mehr enthält wird auch die Abfrageschleife verlassen und es kann zur Auswertung des Tastendrucks kommen.

M5-UIF-Multitaste-008.png

In der Demoversion erfolgt keine sinnvolle Aktion, es wird nur als Rückmeldung ausgegeben welcher Tastendruck erkannt wurde. Dieses ist aber sinnvoll um sich mit dem Verhalten des Programms vertraut zu machen.

Die 100mS Warteschleife vor der Auswertung des Tastendrucks verhindert Fehlauswertungen. Warum sie erforderlich ist weiss ich nicht. Sie ist experimentell entstanden.

Die 500mS Warteschleife dient nur dazu die Anzeige auch sichtbar zu machen. Sonst ist sie ganz schnell wieder verschwunden.


Praktischer Einsatz

Wenn man dieses Demoprogramm praktisch einsetzen möchte muss zum Einen die Aufforderung "klicken" durch eine geignete umgestaltet werden.

Zum Anderen müssen in der Auswertung die gewünschten Funktionen einetzt werden. Die 500mS Warteschleife ist dann nicht erforderlich.


Download

Zum Download des Programms bitte mit der rechten Mousetaste auf den Link klicken und dann auf "Ziel speichern unter ..." mit der linken Mousetaste klicken. (Ich habe leider keine bessere Möglichkeit gefunden.)

Media:Multiklick.m5f

Diese Seite wurde zuletzt am 9. März 2020 um 19:16 Uhr geändert. Diese Seite wurde bisher 914 mal abgerufen.