UIFlow-Eingabe für 16-Tasten mit Extend I/O: Unterschied zwischen den Versionen

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche
(Hole_Taste)
K (Hole_Taste)
Zeile 77: Zeile 77:
  
 
[[image:M5-Soft-16T0-030.png]]
 
[[image:M5-Soft-16T0-030.png]]
 +
 +
 +
[[image:M5-Soft-16T0-031.png]]
  
 
== Hole_Wert ==
 
== Hole_Wert ==

Version vom 14. März 2020, 21:28 Uhr

von Peter (peter@attraktor.org)

Bilder-Prefix: M5-Soft-16T0-...


Diese Seite ist noch im Entstehen.

M5-Soft-16T0-001.png

Dieses Programmungetüm ermöglicht es mit Blockly eine 4x4-Matrix-Tastatur abzufragen. Für die Verbindung zwischen der Tastatur und dem M5StickC dient die Unit Extend I/O.

Die Hardware

M5-Soft-16T0-002.png M5-Soft-16T0-004.png M5-Soft-16T0-005.png

Der Finger bei der Tastatur zeigt auf Pin 1 und der Finger an der Unit auf PIN0. Der Pin 1 der Tastatur wird mit PIN0, Pin 2 mit PIN1 u.s.w. der Unit verbunden.

So sieht mein Versuchsaufbau aus:

M5-Soft-16T0-007.png

Die Zahlen neben der Tastatur geben die PIN Nummern der Unit an mit denen die Reihen und Spalten verbunden sind.

Das Prinzip des Programms

Das Prinzip einer Matrixtastatur und deren Abfrage ist sehr anschaulich in der animierten Grafik von Kai Burghardt / CC BY-SA dargestellt:

FunctionalCircuitDiagramOfKeyboardNumPadScanningProcedure-small

Es wird ein Signal an eine Reihe gelegt und dann nachgesehen an welcher Spalte es wieder herauskommt. Wenn kein Signal herauskommt ist keine Taste gedrückt. Wenn ein Signal herauskommt kann es eindeutig durch die Reihen- und die Spaltennummer einer Taste zugeordnet werden.

Bei einer 4x4-Matrix-Tastatur sind 4 Reihen und 4 Spalten vorhanden. Ich habe die 4 Reihen auf PIN0 - PIN3 und die 4 Spalten auf PIN4 - PIN7 gelegt.

M5-UIF-16T0-010.png

Das Bild aus dem Datenblatt des PCA9554PW zeigt die Beschaltung der PIN's. Q1 legt den Ausgang auf HIGH, Q2 auf LOW. Als Eingang sind Q1 und Q2 gesperrt, so dass der PIN über den 100kOhm Widerstand auf HIGH liegt. Einen Tastendruck können wir also nur mit einem LOW-Signal erkennen. Um eine Reihe zu scannen muss diese auf LOW gelegt werden. Dann wird die Spalte mit der gedrückten Taste auch LOW.

Nun werde ich zeigen, wie ich dieses Prinzip mit Blockly umgesetzt habe. Zuerst einmal möchte sagen, dass Blockly keine Blöcke zur Bitmanipulation bereitstellt, deshalb wirkt das Programm an einigen Stellen umständlich. Ich will auch nicht behaupten, dass dieses Programm in irgend einer Weise vorbildlich wäre. Es ist nur mein Versuch eine 4x4-Matrix-Tastatur zur Werteeingabe mit dem M5StickC zu benutzen.

Das Hauptprogramm und die Codeumwandlung

M5-Soft-16T0-010.png

Das Hauptprogramm ist sehr einfach.

Setup

Im Setup wird die Disolay Ausrichtung auf horizontal - Taste rechts eingestellt.

Anschließend wird eine MAP (in Python: Dictionary) erstellt. Diese enthält die Zuweisung der Tasten zu den Codes die vom Unit gelesen werden.

Dann werden noch die Variablen maxWert und wert auf ihre Startwerte gesetzt.

Loop

Die Funktion hole_wert tut das, was man bei ihrem Namen vermutet. Sie holt einen Wert von der Matrix-Tastatur. Dieser Wert wird an die Variable temp übergeben. Diese wird an die Funktion zeige_display weitergereicht. Diese Funktion zeigt den Wert auf dem Disolay an.

Dann wartet das Programm darauf, das Taste A gedrückt wird. Sonst würde man die Anzeige gar nicht sehen können, weil dann sofort ein neuer Wert geholt wird.

Init_Port

Initialisiert den Port. D.h. es werden die einzelnen PIN's als Ein- oder Ausgang eingestellt und die Ausgänge auf einen definierten Wert gesetzt. Was konkret passiert ist aus dem folgenden Bild ersichtlich und bedarf keiner Erläuterung:

M5-Soft-16T0-020.png

Bei der Gestaltung dieser Funktion habe ich einige Probleme gehabt. Ursprünglich hatte folgende Version geschrieben:

M5-Soft-16T0-021.png

Da beim Schreiben auf einen PIN dieser automatisch zum Ausgang wird werden alle PIN's zu Ausgängen und auf HIGH gesetzt. Anschliessend werden die 4 Eingänge umgeschaltet. Da der erste Block aber nicht richtig programmiert wurde schreibt er immer 0x68 auf den Port, egal was man eingibt. Deshalb musste ich die aufwändigere Variante wählen.

Hole_Taste

Diese Funktion wartet auf einen Tastendruck und liefert dann einen der Taste entsprechenden Code zurück.

M5-Soft-16T0-030.png


M5-Soft-16T0-031.png

Hole_Wert

Ganze Zahlen werden ohne Nachkommastzellen angezeigt. Erst bei Eingabe des Kommas (*) werden auch Nachkommastellen angezeigt. Die Anzahl der Nachkommastellen muss leider fest vorgegeben werden.

Zeige_Display

Download