Eigene Symbole auf LCD



Ziel:

Eigene Symbole erschaffen und im LCD ausgeben.

Für dieses Problem benutzt man die Methode lcd.createChar().

In unserem Fall soll es das Symbol einer leeren Batterie sein:

           

Genauso gut könnten es auch Umlaute oder was auch immer sein (siehe Seitenende).




Programmquellcode:

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);


//das Byte-Array mit dem Symbol:
byte battery[8] = {
0b01110,
                    0b11011,
                    0b10001,
                    0b10001,
                    0b10001,
                    0b10001,
                    0b10001,
                    0b11111
};

void setup(){
    lcd.clear();
    lcd.begin(16, 2);


    lcd.createChar(0, battery); //das Byte-Array in den LCD-Speicher 0 schreiben
    lcd.setCursor(0, 0);
    lcd.write( (uint8_t) 0 ); // Byte-Array von LCD-Speicherplatz 0 ausgeben

}

 
void loop(){
    // hier steht jetzt mal nix

}






Erklärung der Vorgehensweise

Ein einzelnes Zeichen auf dem LCD besteht aus 5x8 Pixeln, z. B. eine Batterie:


   



01110
11011
10001
10001
10001
10001
10001
11111

    

1. Schritt:

Ein Byte-Array mit dem gewünschten Symbol erstellen.
Ein Symbol unseres LCD besitzt 5 Spalten und 8 Zeilen.
Eine Zeile wird somit durch eine 5-stellige Binärzahl repräsentiert z. B.: 0b01110 (das "0b" meint: "Binärzahl")

Du kannst auch diesen komfortablen Symboleditor nehmen:

    symboleditor.png

Hier kannst Du ihn herunterladen.

Er ist in Java geschrieben und Du kannst ihn einfach starten, wenn Du auf Deinem Computer .jar-Dateien starten kannst (also wenn Du eine Java-Laufzeitumgebung besitzt).
Du musst nur die gewünschten Checkboxen anhaken und kannst dann aus dem rechten Fenster den fertigen Quelltext in Deinen Sketch kopieren.



2. Schritt:

Dieses Byte-Array in einem der 8 dafür vorgesehenen Speicherplätze im LCD ablegen.


3. Schritt:

Ausgeben des Speicherbereiches auf dem Display.

Dafür muss die Speicheradresse in das Zahlenformat bzw. den Datentyp uint8_t gecastet (meint: "umgewandelt) werden.

uint8_t meint:

u unsigned (kein Vorzeichen: also nur positive Zahlen)
uint unsigned int (nur positive ganze Zahlen)
uint8 mit 8 Bit (0 bis 255)
uint8_t das _t steht für: "das ist ein Datentyp" (damit sollen Verwechslungen mit Variablennamen ausgeschlossen werden)




Die großbuchstabigen Umlaute Ä, Ö und Ü bekommt man mit folgenden Byte-Arrays:

byte AE[8] =      { 0b10001,
                    0b01110,
                    0b10001,
                    0b10001,
                    0b11111,
                    0b10001,
                    0b10001,
                    0b00000 };

byte OE[8] =      { 0b10001,
                    0b01110,
                    0b10001,
                    0b10001,
                    0b10001,
                    0b10001,
                    0b01110,
                    0b00000 };

byte UE[8] =      { 0b10001,
                    0b0000,
                    0b10001,
                    0b10001,
                    0b10001,
                    0b10001,
                    0b01110,
                    0b00000 };