M5Dial BTN: Unterschied zwischen den Versionen

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 16: Zeile 16:
<pre>
<pre>
M5.update()
M5.update()
  x = BtnA.isHolding()
x = BtnA.isHolding()
  x = BtnA.isPressed()
x = BtnA.isPressed()
  x = BtnA.isReleased()
x = BtnA.isReleased()
  x = BtnA.wasClicked()
x = BtnA.wasClicked()
  x = BtnA.wasDoubleClicked()
x = BtnA.wasDoubleClicked()
  x = BtnA.wasHold()
x = BtnA.wasHold()
  x = BtnA.wasPressed()
x = BtnA.wasPressed()
  x = BtnA.wasReleased()
x = BtnA.wasReleased()
  x = BtnA.wasSingleClicked()
x = BtnA.wasSingleClicked()
</pre>
</pre>


Zeile 51: Zeile 51:
: wird True wenn die Taste bei einer Abfrage gedrückt und bei der nächsten wieder losgelassen war.
: wird True wenn die Taste bei einer Abfrage gedrückt und bei der nächsten wieder losgelassen war.
; was single clicked
; was single clicked
:
: habe ich nichts zu ermitteln können.
; was double clicked
; was double clicked
:
: habe ich nichts zu ermitteln können.


Hier die Ausgabe des Programms wenn die Taste über mehrere Abfragen gedrückt gehalten wird:
Hier die Ausgabe des Programms wenn die Taste über mehrere Abfragen gedrückt gehalten wird:
Zeile 83: Zeile 83:
</pre>
</pre>


Wie man hier sieht treten mehrere Werte gleichzeitig auf.
<br>
== Btn als Interrupt==


Es gibt folgende Interrupt Trigger ('''BtnA.CB_TYPE.'''):
*'''WAS_CLICKED'''
*'''WAS_DOUBLECLICKED'''
*'''WAS_HOLD'''
*'''WAS_PRESSED'''
*'''WAS_RELEASED'''
Hier mein Testprogramm (M5Dial_Btn_int_001):
<br>
[[File:M5Dial_Btn_int_001.png]]
<br>
<br>
Ohne Betätigung wird nur '''is released''' zurückgegeben:
Auch wenn es sich hier um Interrupts handelt ist '''M5.update()''' wichtig, weil die Ergebnisse der Interrupts sonst nicht zur Anwendung kommen. '''M5.update()''' wird hier in der Loop aufgerufen.
 
=== Ergebnisse===
==== Drücken - Halten - Loslassen:====
<pre>
<pre>
is released
pressed
--------------------
</pre>


==== Folgendes zeigt die Reaktion auf:====
hold
; bei der Abfrage gedrückt
: is pressed
; vor der nächsten Abfrage wieder losgelassen
: is released
; bei der Abfrage gedrückt
: is pressed
; bei der nächsten Abfrage noch immer gedrückt
: is holding
; vor der übernächsten Abfrage wieder losgelassen
: is released
Damit sind diese drei Werte logisch erklärt.


=== M5Dial_BtnA_002===
released
Da diese drei Werte am Anfang der Abfrage standen habe ich sie entfernt. Mal sehen, ob dann andere Ergebnisse zum Vorschein kommen.
</pre>
Bei der ersten Abfrage wird '''pressed''' ausgegeben, bei der zweiten '''hold'''. Alle weiteren Abfragen mit gedrückter Taste geben nichts zurück. Erst die Abfrage bei der die Taste losgelassen worden ist gibt dann '''released''' zurück. Weitere Rückgaben erfolgen nicht.
<br>
<br>
[[file:M5Dial_BtnA_Test_002.png]]
==== Kurz Klicken:====
; Bei grün gedrückt und erst bei rot wieder losgelassen
<pre>
: was pressed
pressed
; bei rot gedrückt und bei Grün losgelassen
: was clicked
; bei grün gedrückt und beim nächsten grün losgelassen
: was pressed und nach dem nächsten auslesen (Wechsel von grün auf rot) was released
; bei rot gedrückt und beim nächsten rot wieder losgelassen
: was hold


                Y
clicked
__________XXXXXXXXXXXXXXX__________
released
                  was pressed
</pre>


      Y                Y
==== Doppelklick:====
_________XXXXXXXXXXXXXX________
<pre>
                        was clicked
pressed


                  Y                Y
clicked
_________XXXXXXXXXXXXXXX___________________
released
                  was pressed      was released
                  Y                        Y
_____________________XXXXXXXXXXXXXXXXXXXXXXXXXXX______________
                                            was hold


<pre>
pressed


clicked
released
double clicked
</pre>
</pre>


<br>
== Polling mit Micropython==
 
== Btn als Interrupt==


Es gibt folgende Interrupt Trigger ('''BtnA.CB_TYPE.'''):
*'''WAS_CLICKED'''
*'''WAS_DOUBLECLICKED'''
*'''WAS_HOLD'''
*'''WAS_PRESSED'''
*'''WAS_RELEASED'''


== Interrupt mit Micropython==
<pre>
<pre>
def btnA_wasClicked_event(state):
def btnA_wasClicked_event(state):

Aktuelle Version vom 1. Mai 2024, 23:27 Uhr

Beschreibung[Bearbeiten | Quelltext bearbeiten]

Der M5Dial besitzt einen Taster (Btn). Dieser befindet sich unter dem orangenen Ring unten, unter der M5 Gravur.
Dieser Button kann gepollt werden oder einen Interrupt auslösen.
Es können 9 verschiedene Betätigungen unterschieden werden.

Einrichtung[Bearbeiten | Quelltext bearbeiten]

Er muss nicht initialisiert werden.
Wenn er einen Interrupt auslösen soll, so muss ihm aber eine ISR zugewiesen werden.

Btn abfragen (polling)[Bearbeiten | Quelltext bearbeiten]

M5.update()
x = BtnA.isHolding()
x = BtnA.isPressed()
x = BtnA.isReleased()
x = BtnA.wasClicked()
x = BtnA.wasDoubleClicked()
x = BtnA.wasHold()
x = BtnA.wasPressed()
x = BtnA.wasReleased()
x = BtnA.wasSingleClicked()

Ermitteln der Funktionen[Bearbeiten | Quelltext bearbeiten]

Was bedeuten die verschiedenen Werte? Dazu habe ich einige Tests mit Blockly unternommen.

BtnA_Test_001[Bearbeiten | Quelltext bearbeiten]

M5Dial BtnA Test 001.png
Dieses Programm gibt einen Vorlauf mit grünem Display. Dann wechselt die Farbe auf Rot und die verschiedenen Button Zustände werden abgefragt. Wird True zurückgegeben so wird dieser Zustand in der Konsole ausgegeben.

Auswertung[Bearbeiten | Quelltext bearbeiten]

is released
ist immer True, wenn die Taste beim Abfragen nicht gedrückt ist.
is pressed
ist dann True, wenn die Taste beim Abfragen gedrückt ist.
is holding
ist dann True, wenn die Taste bei der vorherigen Abfrage ebenfalls gedrückt war.
was pressed
wird True, wenn die Taste bei der Abfrage neu gedrückt wurde. Erscheint nur einmal.
was released
wird True, wenn die Taste gedrückt war und bei dieser Abfrage losgelassen war. Erscheint aber nur einmal.
was hold
ist dann True, wenn sie bei der vorherigen Abfrage zum Ersten mal gedrückt war. Erscheint also nur einmal.
was clicked
wird True wenn die Taste bei einer Abfrage gedrückt und bei der nächsten wieder losgelassen war.
was single clicked
habe ich nichts zu ermitteln können.
was double clicked
habe ich nichts zu ermitteln können.

Hier die Ausgabe des Programms wenn die Taste über mehrere Abfragen gedrückt gehalten wird:

--------------------
is released
--------------------
was pressed
is pressed
--------------------
was hold
is holding
is pressed
--------------------
is holding
is pressed
--------------------
is holding
is pressed
--------------------
is holding
is pressed
--------------------
was released
is released
--------------------
is released
--------------------

Wie man hier sieht treten mehrere Werte gleichzeitig auf.

Btn als Interrupt[Bearbeiten | Quelltext bearbeiten]

Es gibt folgende Interrupt Trigger (BtnA.CB_TYPE.):

  • WAS_CLICKED
  • WAS_DOUBLECLICKED
  • WAS_HOLD
  • WAS_PRESSED
  • WAS_RELEASED

Hier mein Testprogramm (M5Dial_Btn_int_001):
M5Dial Btn int 001.png
Auch wenn es sich hier um Interrupts handelt ist M5.update() wichtig, weil die Ergebnisse der Interrupts sonst nicht zur Anwendung kommen. M5.update() wird hier in der Loop aufgerufen.

Ergebnisse[Bearbeiten | Quelltext bearbeiten]

Drücken - Halten - Loslassen:[Bearbeiten | Quelltext bearbeiten]

pressed

hold

released

Bei der ersten Abfrage wird pressed ausgegeben, bei der zweiten hold. Alle weiteren Abfragen mit gedrückter Taste geben nichts zurück. Erst die Abfrage bei der die Taste losgelassen worden ist gibt dann released zurück. Weitere Rückgaben erfolgen nicht.

Kurz Klicken:[Bearbeiten | Quelltext bearbeiten]

pressed

clicked
released

Doppelklick:[Bearbeiten | Quelltext bearbeiten]

pressed

clicked
released

pressed

clicked
released
double clicked

Polling mit Micropython[Bearbeiten | Quelltext bearbeiten]

Interrupt mit Micropython[Bearbeiten | Quelltext bearbeiten]

def btnA_wasClicked_event(state):
  global x
  pass
M5.begin()
BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btnA_wasClicked_event)

Navigation[Bearbeiten | Quelltext bearbeiten]

Zurück zu M5Dial
Zurück zur M5Micropython Startseite