Eigenes Zeichen in CGRAM

Guten Morgen und frohe Weihnachten.

Ich würde gerne ein eigenes Zeichen erstellen und dieses im CGRAM des Displays ablegen. Ich verwende die LiquidCrystal.h Bibliothek. Ich weiß, da kann man die Zeichen über Chars etc defenieren. Nur leider kann ich die Zeichen dann nicht als Buchstaben im Wort einfügen, sondern muss das jedes mal umständlich über lcd.write() machen. Das nervt, wenn man die Zeichen dauernd braucht!!!
Ich habe ein Beispiel-Programm im Internet gefunden, nur leider funktioniert das nicht, da es nicht direkt für Arduino geschrieben wurde....

Kalle's Blog

Eine andere Möglichkeit habe ich im Internet noch nicht gefunden!

Kennt einer von euch ne Lösung?
Oder kann mir weiterhelfen, das Programm von Kalle auf die Arduino umzuschreiben?

Besten Dank und schöne Feiertage weiterhin :slight_smile:

PS: Benutze nen LCD mit nem HD44780U

"HD44780 custom character" in Google eingeben. Das erste Eregebnis ist bei mir:

https://omerk.github.io/lcdchargen/

Da kann man das Zeichen durch klicken erstellen und der Code wird auch generiert.

Nur leider kann ich die Zeichen dann nicht als Buchstaben im Wort einfügen, sondern muss das jedes mal umständlich über

Klar geht das!

lcd.print("Blah\x01" "blah");

oder:

lcd.print("Blah" "\x01" "blah");

Hier muss man nur die Teil-Strings trennen weil der Compiler sonst x01b als eine Zahl interpretieren will. Wenn nach der Zahl nichts von 0-f kommt, kann man das auch weglassen

EDIT: x00 geht so nicht. Der Rest schon

Aduadu:
Kennt einer von euch ne Lösung?
Oder kann mir weiterhelfen, das Programm von Kalle auf die Arduino umzuschreiben?

Selbstdefinierte Zeichen kannst Du selbst definieren per lcd.createChar().

Mit dem Beispielprogramm zur LiquidCrystal-Library fängst Du am besten an.

Du kannst bis zu acht (0...7) selbstdefinierte Zeichen gleichzeitig definiert haben (z.B. im setup) und dann später im Programm gleichzeitig nutzen.

Du kannst insgesamt auch viel mehr als 8 verschiedene Zeichen nutzen, aber dann mußt Du die Zeichen innerhalb des Programms vor dem Anzeigen immer umdefinieren und dann anzeigen. Es können zu jedem Zeitpunkt nur 8 verschiedene selbstdefinierte Zeichen sein.

Per Hex- oder Octal-Codierung kannst Du diese Sonderzeichen nicht nur lcd.write, sondern auch mit lcd.print zusammen verwenden.

Moin.

Vielen Dank schon mal.

Nur bekomme ich es gerade nicht hin, die Zeichen auszugeben. Diese werden komplett ignoriert!!!!
Muss ich da die Hex 0x00 senden? Wenn ja, dann geht das nicht :confused:

Aduadu:
Moin.

Vielen Dank schon mal.

Nur bekomme ich es gerade nicht hin, die Zeichen auszugeben. Diese werden komplett ignoriert!!!!
Muss ich da die Hex 0x00 senden? Wenn ja, dann geht das nicht :confused:

Die Codes von 1 bis 7 kannst Du innerhalb eines Strings als HEX oder OCT (octal) codieren und zusammen mit anderen Zeichen senden.

Den Code 0 kannst Du innerhalb eines Strings NICHT verwenden, da ein Nullzeichen in der Programmiersprache C/C++ für "Ende des Strings" steht. Das 0-Zeichen müßtest Du also extra per "write()" Aufruf senden.

#include <LiquidCrystal.h>

LiquidCrystal lcd(8,9,4,5,6,7);

byte smiley[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};

void setup() {
  lcd.begin(16, 2);  
  lcd.createChar(1, smiley);
  lcd.clear();
  lcd.print("HEX: \x01 ready");
  lcd.setCursor(0,1);
  lcd.print("OCT: \001 ready");
}

void loop() {}

Also um Zeichen in einem String einzufügen, besser nicht Code 0 dafür nehmen, sondern die sieben Zeichen mit Code 1 bis 7.

jurs:
Den Code 0 kannst Du innerhalb eines Strings NICHT verwenden

Oops. Natürlich. Daran hatte ich nicht gedacht als ich das auf die schnelle geschrieben habe :frowning:

Es ist auch \xnn und nicht \0xnn

Siehe:

Besten Dank.
Jetzt klappt es, wie es soll!!!
In diesem Sinne!

Frohe Weihnachtstage euch :slight_smile: