M5Dial BTN: Unterschied zwischen den Versionen
Peter (Diskussion | Beiträge) |
Peter (Diskussion | Beiträge) |
||
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 16: | Zeile 16: | ||
<pre> | <pre> | ||
M5.update() | 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() | |||
</pre> | </pre> | ||
Zeile 34: | Zeile 34: | ||
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. | 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. | ||
<br> | <br> | ||
==== Auswertung==== | |||
; 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: | |||
<pre> | <pre> | ||
-------------------- | |||
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 | is released | ||
-------------------- | -------------------- | ||
</pre> | </pre> | ||
Wie man hier sieht treten mehrere Werte gleichzeitig auf. | |||
<br> | <br> | ||
Zeile 72: | Zeile 95: | ||
*'''WAS_RELEASED''' | *'''WAS_RELEASED''' | ||
Hier mein Testprogramm (M5Dial_Btn_int_001): | |||
<br> | |||
[[File:M5Dial_Btn_int_001.png]] | |||
<br> | |||
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> | |||
pressed | |||
hold | |||
released | |||
</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> | |||
==== Kurz Klicken:==== | |||
<pre> | |||
pressed | |||
clicked | |||
released | |||
</pre> | |||
==== Doppelklick:==== | |||
<pre> | |||
pressed | |||
clicked | |||
released | |||
pressed | |||
clicked | |||
released | |||
double clicked | |||
</pre> | |||
== Polling mit Micropython== | |||
== 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]
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):
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)