Guten Tag @ all.
Ich würde gerne auf meinem 20x4 LCD Display etwas künstlerisch aktiv werden. Hierzu hab ich die Funktion lcd.createChar gefunden und mir das gewünschte Bild schon in die byte-Blöcke umgeschrieben.
Habe jetzt nur das Problem das ich die createChar-Funktion nur 8 mal verwenden kann (wenn ich nicht ganz verkehrt bin, dann kann char 256 aufnehmen (ohne Vorzeichen).
Gehe ich hin und verwende die Funktion ein 9. mal, dann bekomme ich auf dem Display überall wo eigentlich das 1. Symbol hin soll ebenfalls das 9. --> er überschreibt also mit 9 die 1.
Kann mir jemand sagen wieso - und insbesondere wie ich mehr Zeichen erstellen kann?
Habs mal damit versucht 7 Zeichen zu definieren, diese zu schreiben und danach wieder neue zu definieren, aber auch da überschreiben die höherzähligen Zeichen dann die niederzähligen ...
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Zeichen erstellen
byte boden[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111
};
byte turm1[8] = {
B00000,
B00000,
B00000,
B11111,
B11111,
B11000,
B11001,
B11010
};
byte turm2[8] = {
B01110,
B01110,
B01110,
B11111,
B11111,
B10100,
B00100,
B00100
};
byte turm3[8] = {
B00000,
B00000,
B00000,
B11001,
B11000,
B11000,
B11000,
B11000
};
byte turm4[8] = {
B11100,
B11010,
B11001,
B11000,
B11000,
B11000,
B11000,
B11000
};
byte turm5[8] = {
B00100,
B00100,
B00100,
B10100,
B01100,
B00100,
B00110,
B00101
};
byte turm6[8] = {
B11011,
B11111,
B11011,
B11011,
B11011,
B11011,
B11111,
B11011,
};
byte turm7[8] = {
B00000,
B00000,
B00000,
B00001,
B00000,
B00000,
B00000,
B11111,
};
byte turm8[8] = {
B11000,
B11000,
B11000,
B11000,
B11001,
B11010,
B11100,
B11010,
};
byte turm9[8] = {
B00110,
B00100,
B01100,
B10100,
B00100,
B00100,
B00100,
B00100,
};
byte turm10[8] = {
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
byte turm11[8] = {
B11001,
B11000,
B11000,
B11000,
B11000,
B11000,
B11111,
B11111,
};
byte turm12[8] = {
B00100,
B10100,
B01100,
B00100,
B00110,
B00101,
B11111,
B11111,
};
byte turm13[8] = {
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11111,
B11111,
};
byte pfeil1[8] = {
B00000,
B01000,
B10000,
B11111,
B10000,
B01000,
B00000,
B00000,
};
byte pfeil2[8] = {
B00000,
B00000,
B00000,
B11111,
B00000,
B00000,
B00000,
B00000,
};
byte pfeil3[8] = {
B00000,
B00000,
B00010,
B11110,
B00010,
B00000,
B00000,
B00000,
};
byte pfeil4[8] = {
B00000,
B00000,
B00000,
B00111,
B00100,
B00100,
B00100,
B00100,
};
byte pfeil5[8] = {
B00100,
B00100,
B10101,
B01110,
B00100,
B00000,
B11111,
B11111,
};
void setup() {
// I2C-Display initialisieren
lcd.begin(20,4);
lcd.backlight();
// 1.Block
lcd.createChar(0, boden);
lcd.createChar(1, turm1);
lcd.createChar(2, turm2);
lcd.createChar(3, turm3);
lcd.createChar(4, pfeil1);
lcd.createChar(5, pfeil2);
lcd.createChar(6, pfeil3);
lcd.createChar(7, turm4);
lcd.createChar(8, turm5); // und ab hier wird 0 überschrieben .... :-(
lcd.setCursor(0, 0);
lcd.print((char)0);
lcd.print((char)1);
lcd.print((char)2);
lcd.print((char)3);
lcd.print((char)4);
lcd.print((char)5);
lcd.print((char)6);
lcd.print((char)7);
lcd.print((char)8);
lcd.print("Ende");
lcd.setCursor(1, 1);
}
void loop() {}