In diesem kleinen Kästchen werkelt ein Arduino Nano vor sich hin, der über ein 4×4 Matrix KeyPad eine fünfstellige PIN annimmt und auf einem 0,96″ OLED Display anzeigt. Die eingegebene Ziffernfolge wird mit einer bereits im Speicher hinterlegten PIN verglichen. Ist sie identisch, wird dies durch eine grüne LED und eine positive Meldung auf dem Display angezeigt. Wird die PIN falsch eingegeben, leuchtet eine rote LED und es scheint eine negative Meldung auf dem Display.
Nur Daddelkram
Das war es eigentlich auch schon, den das gute Stück ist dieses Wochenende als Spielzeug für die Kinder entstanden und soll ein Türschloss mit Code-Eingabe darstellen.
Eine gute Gelegenheit, mich erstmals mit der Funktionsweise des I²C OLED Displays* zu beschäftigen, das ich schon vor Monaten im 3er-Pack gekauft und in den Schrank gelegt hatte. Bevorratung für Wochenenden wie dieses, man weiß ja nie. 🙂
Tatsächlich stellt das Display selbst keine Herausforderung dar. 5V, GND und die zwei I²C-Leitungen, fertig. Der eigentlich spannende Teil steckt in der U8g2-Library, die ich zur Ansteuerung verwendet habe. Neben reiner Textdarstellung bietet U8g2 eine UTF-8 / Unicode Unterstützung und die Möglichkeit, Symbole oder geometrische Formen und Figuren zu erzeugen. Der Funktionsumfang ist riesig und ich habe nur kurz an der Oberfläche gekratzt. Als Gegenleistung fordert die Library auch ordentlich Speicherplatz ein. Auf dem Arduino Nano sind ca. 90% des Variablen-Speichers mal eben weg.
Das Matrix KeyPad aus dem Elegoo Ultimate Starter Kit* lässt sich mit der vorhandenen Buchsenleiste direkt auf die Pins des Arduinos aufstecken. Kein zusätzliches Verkabeln, kein Löten. Auf der Rückseite hat das KeyPad eine Klebefläche und kann damit einfach aufgeklebt werden. Mit dem Beispiel-Sketch von Elegoo werden die gedrückten Tasten direkt im seriellen Monitor angezeigt.
Text ist Text… oder etwa nicht?
Beim Versuch, die Elemente in einem Programm zusammenzubringen bin ich dann auf die ersten Schwierigkeiten gestoßen. Die strikte Trennung von Datentypen unter C++ ist mir immer noch ein Graus. String, char, char array, … argh. Da lobe ich mir doch Perl, wo man fast sagen kann, Text ist Text 🙂
Das KeyPad hat neben den Ziffern-Tasten noch die Buchstaben A bis D und die Symbole * und #. Die verwendete Library gibt das Ergebnis als char aus. Soweit erst mal nicht schlimm. Jetzt war meine Idee allerdings, fünf nacheinander eingegebene Ziffern mit einer bereits gespeicherten Ziffernfolge zu vergleichen. Nach anfangs wirren Array-Konstruktionen, bin ich letztendlich bei strcmp() gelandet, um den Vergleich durchzuführen.
Wieder einmal hat sich gezeigt, dass auch kleine Projekte ihre Herausforderungen haben können. In den kommenden Tagen werden ich mich wohl ein wenig intensiver mit den C++ Datentype und insbesondere mit Pointern beschäftigen müssen. Das Programm enthält in der Hinsicht noch zu viel Spekulation und zu wenig Wissen.
2 thoughts on “Matrix Keypad und OLED”
Nicht schlecht, ein nettes Beispiel für den open_iconic Font. Danke dafür.
Der Speicherbedarf kommt natürlich auch von den verwendeten Fonts und der Größe des internen Bildschirmspeichers.
Mit „u8g2_font_8x13_mr“ („r“ am Ende) und „U8G2_SSD1306_128X64_NONAME_1_HW_I2C“ („1“ statt „F“) könnte der Speicherbedarf deutlich runter gehen.
Ich habe zu danken, für die geniale Library.
Deine Tipps zum Speicherbedarf werde ich beim nächsten Projekt auf jeden Fall berücksichtigen. Zwischenzeitig habe ich auch den Wiki-Eintrag zur Flash Memory Optimization gefunden. Jetzt wird einiges klarer.