Inhaltsverzeichnis:

Benutzerdefinierter Zeichengenerator (Adafruit HT16k33 Matrix) - Gunook
Benutzerdefinierter Zeichengenerator (Adafruit HT16k33 Matrix) - Gunook

Video: Benutzerdefinierter Zeichengenerator (Adafruit HT16k33 Matrix) - Gunook

Video: Benutzerdefinierter Zeichengenerator (Adafruit HT16k33 Matrix) - Gunook
Video: Die Technik hinter Teletext 2024, Juli
Anonim
Benutzerdefinierter Zeichengenerator (Adafruit HT16k33 Matrix)
Benutzerdefinierter Zeichengenerator (Adafruit HT16k33 Matrix)

Das Drucken von Sonderzeichen auf LCDs und LED-Matrizen macht großen Spaß. Das Verfahren zum Drucken von Sonderzeichen oder benutzerdefinierten Zeichen besteht darin, ein Array mit Binärwerten für jede Zeile und Spalte zu generieren. Es kann hektisch sein, den richtigen Code für jedes benutzerdefinierte Zeichen zu finden, daher automatisiert und generiert dieses Projekt Code für eine 8x8-LED-Matrix und druckt das benutzerdefinierte Zeichen auch auf der Adafruit HT16k33 8x8 Bicolor-Matrix.

Adafruit HT16k33, eine 1,2-Zoll-8x8-Bicolor-LED-Matrix, kommuniziert mit Arduino über ein I2C-Kommunikationsprotokoll

Laut Adafruit "ist diese Version des LED-Rucksacks für die 1,2" 8x8-Matrizen ausgelegt. Sie messen nur 1,2 "x 1,2", daher ist es eine Schande, eine riesige Anzahl von Chips zu verwenden, um sie zu steuern. Dieser Rucksack löst das Ärgernis der Verwendung von 16 Pins oder einer Reihe von Chips, indem ein I2C-Konstantstrom-Matrix-Controller ordentlich auf der Rückseite der Platine sitzt. Der Controller-Chip kümmert sich um alles und zeichnet alle 64 LEDs im Hintergrund. Alles, was Sie tun müssen, ist, Daten über die 2-polige I2C-Schnittstelle darauf zu schreiben. Es gibt zwei Adressauswahl-Pins, sodass Sie eine von 8 Adressen auswählen können, um bis zu 8 davon auf einem einzigen 2-Pin-I2C-Bus (sowie beliebige andere I2C-Chips oder -Sensoren) zu steuern. Der Treiberchip kann das gesamte Display in 1/16-Schritten von 1/16 Helligkeit bis zur vollen Helligkeit „dimmen“. Er kann nicht einzelne LEDs dimmen, sondern nur das gesamte Display auf einmal."

In diesem anweisbaren erkläre ich Ihnen, wie Sie den Code für jedes benutzerdefinierte Zeichen in Echtzeit erhalten und dieses Zeichen auf Led Matrix drucken.

Schritt 1: Komponenten

Dieses instructable ist ein grundlegendes Projekt auf Adafruit HT16k33 Matrix. Du brauchst:

  1. Adafruit HT16k33 1,2'' x 1,2'' 8x8 Bicolor LED-Matrix.
  2. Arduino (jede Variante außer Uno wird bevorzugt).
  3. Steckbrett
  4. Energieversorgung

Schritt 2: Schema

Schaltplan
Schaltplan
Schaltplan
Schaltplan

Die Verdrahtung der Adafruit HT16k33 Led-Matrix ist sehr einfach, da wir den Takt- und Daten-Pin anschließen müssen, wie wir es normalerweise für I2C-Geräte tun. Verbindungen werden wie folgt sein:

  1. SCL (Clock Pin von Matrix) verbunden mit A5 (Clock Pin von Arduino Uno. Siehe Datenblatt für andere Varianten von Arduino)
  2. SDA (Datenpin der Matrix) an A4 angeschlossen. (Siehe Datenblatt für andere Varianten von Arduino)
  3. VCC an 5V angeschlossen.
  4. GND mit 0V verbunden.

Sie können auch das in der Abbildung gezeigte Schema konsultieren.

Schritt 3: Code

Code
Code
Code
Code

Arduino-Code

Zunächst werden wir alle benötigten Bibliotheken einbinden.

  1. Wire.h:- Für I2C-Kommunikation
  2. Adafruit_LedBackpack
  3. Adafruit_GFX

Alle diese Bibliotheken sind in der Arduino IDE selbst verfügbar. Sie müssen sie nur über den Bibliotheksmanager installieren. Sketch >> Bibliothek einschließen >> Bibliotheken verwalten

Setup-Funktion ()

Festlegen eines vorzeichenlosen 8-Bit-Integer-Arrays auf strore8-Binärwerte für 8 Zeilen mit jeweils 8 Bit (8 Spalten). Stellen Sie die Adresse für die I2C-Kommunikation ein.

Schleifenfunktion ()

Da wir das Zeichen drucken müssen, benötigen wir den Code für das Zeichen in Echtzeit. Die bequemste Methode besteht darin, den Code seriell zu senden, und Arduino liest die seriellen Daten und druckt das Zeichen entsprechend. Das serielle Senden eines Arrays kann eine hektische Aufgabe sein, daher können wir einen String mit allen 8 Codes (jeweils 8 Bit) durch Kommas getrennt senden.

Lesen der seriellen Zeichenfolge:

if (Serial.available()>0) { data=Serial.readStringUntil('\n'); Serial.println (Daten); }

Nachdem wir den Text gelesen haben, müssen wir diesen String decodieren und die Binärwerte zurückbekommen. Wie wir wissen, ist das Format der Eingabezeichenfolge immer gleich. Wir können es codieren, um Teilzeichenfolgen zu finden und die Zeichenfolgen in ihre dezimalen Äquivalente umzuwandeln. Dann übergeben wir das generierte Dezimalarray (uint8_t), um das Zeichen auf der Matrix zu drucken.

Konvertieren eines Strings von 8 Bit in Dezimal:

int val (String str) {int v = 0; for (int i=0;i<8;i++) { if (str=='1') { v=v+power(2, (7-i)); } } Rückgabe v; }

Um das dezimale Äquivalent mit der Potenzfunktion (pow ()) auszuwerten, müssen Sie mit Werten vom Typ Double umgehen und daher können wir unsere eigene Potenzfunktion schreiben als:

int power (int base, int exponent) {int c=1; for (int i=0;i { c=c*base; } return c; }

Jetzt schreiben wir endlich den Code zum Drucken des Zeichens unter Verwendung des generierten Arrays von 8 Dezimalwerten (einer für jede Zeile).

void print_emoji (uint8_t emoji, Stringfarbe) {matrix.clear(); if (color=="red") {matrix.drawBitmap(0, 0, emoji, 8, 8, LED_RED); aufrechtzuerhalten. Sonst { Matrix.drawBitmap (0, 0, Emoji, 8, 8, LED_GREEN); } matrix.writeDisplay(); Verzögerung (500); }

Sie werden diesen Code leicht verstehen, da wir zuerst die Matrix löschen und dann das Zeichen mit dem Emoji-Array mit der Funktion matrix.drawBitmap() anzeigen. Vergessen Sie nicht, nach allen Formatierungen "matrix.writeDisplay()" zu schreiben, da diese Funktion nur alle bisher auf Matrix vorgenommenen Formatierungen anzeigt.

Jetzt können Sie den String mit allen Codewerten senden und Arduino druckt das Zeichen auf der Matrix. Sie können den Arduino-Code von unten herunterladen. Zu experimentellen Zwecken können Sie schreiben

B00111100, B01000010, B10100101, B10000001, B10100101, B10011001, B01000010, B00111100

diese Zeichenfolge im Serial Monitor und kann das Zeichen auf der Matrix sehen.

Jetzt müssen wir die seriellen Daten automatisch von einer Software senden, wenn wir die Schaltfläche "Drucken" drücken. Um dies zu automatisieren, erstellen wir eine 8x8-Demo-Matrix und bieten dem Benutzer die Möglichkeit, auszuwählen, welche Zellen gefärbt werden sollen. Anschließend generiert die Software automatisch den Code und sendet die Daten seriell im String-Format an Arduino. Für den Rest meiner Arbeit habe ich mich für Processing entschieden. In der Verarbeitung können wir mit 64 Tasten (Rechtecke mit gedrückter Funktion) eine Matrix erstellen und zu Beginn einen bestimmten Wert und eine bestimmte Farbe zuweisen (es sei die weiße Farbe mit dem Wert 0). Immer wenn die Schaltfläche gedrückt wird, konvertieren wir die Farbe der Schaltfläche in Schwarz und setzen den Wert auf 1. Wenn der Benutzer dieselbe Schaltfläche erneut drückt, ändert sich der Wert wieder auf 0 und die Farbe zurück auf Weiß. Dies hilft dem Benutzer, den Code immer wieder leicht zu ändern und kann problemlos Änderungen vornehmen, ohne die gesamte Matrix erneut zu löschen. Wenn Sie auf die Schaltfläche "Drucken" klicken, erstellen wir eine Zeichenfolge ähnlich der oben für die Demo gezeigten. Dann wird der String an den jeweiligen seriellen Port gesendet.

Den Verarbeitungscode können Sie unten herunterladen. Dies ist mein erster Code in der Verarbeitung. Vorschläge für die verbesserte Art der Codierung sind sehr willkommen.

Sie können sehen, wie die GUI aussieht und wie der Charakter mit dem System erstellt wird. Es dauert kaum Sekunden, das gleiche Zeichen auf der Matrix zu erstellen.

Sie können den Code und die Bilder dieses Projekts von meinem GitHub-Repository herunterladen.

Empfohlen: