M5Dial Touch

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen

Die Verwendung des Touchscreens hält noch einige Hürden bereit.

Das Grundprinzip ist mit M5.Touch.getCount() abzufragen, ob der Touchscreen berührt wird. Nicht berührt wird 0, bei Berührung 1 zurückgegeben.

Das funktioniert aber nicht als Argument für if und while!



So funktioniert es:

So nicht:


Mit der Einschränkung umgehen

Ideen für eine Touch-Service-Routine

Ich möchte eine Funktion schreiben, die aktiverte Touch-Elemente findet.
Sie soll eine ID des aktivierten Elementes und die Dauer der Berührung zurückgeben oder eine Funktion ausführen und ggf. deren Rückgabe zurückgeben.
Als Eingabe bekommt sie eine Liste, die für jedes abzufragende Touch-Element die folgende Datenstruktur enthält:

Datenstruktur für jedes Touch-Element

Die unten dargestellte Datenstruktur soll für jedes aktuell zu überwachende Touch-Element erstellt und in einer Liste zusammengefasst werden. Diese Liste wird an die Funktion übergeben.

# so:

touch_data = {'x1':0, 'y1':0, 
              'x2':100, 'y2':50, 
              'id':42, 
              'func':None}

# oder so:

touch_data_1 = {'startpoint':(0, 0), 
                'endpoint':(100, 50), 
                'id':42, 
                'func':None}
x1, y1, startpoint
die Koordinaten oben links des Touch-Elementes
x2, y2, endpoint
die Koordinaten unten rechts des Touch-Elementes
id
individuelle Kennung des Touch-Elementes
func
Name einer Funktion die ausgeführt werden soll, wenn das Touch-Element aktiviert wird.

Identifikation eines Touch-Elementes

Dieser Codeschnippsel kann als Orientierung dienen:

>>> def detect(x):
    if 0<x<42:
        print('innerhalb')
    else:
        print('ausserhalb')
        
>>> x = 25
>>> detect(x)
innerhalb
>>> detect(125)
ausserhalb

Mit folgender Abfrage kann ein Touch-Element identifiziert werden:

if x1<x<x2 and y1<y<y2:
#    dann wurde ein Element gefunden!

Das muss aber noch getestet werden!