hab diese Information nirgends gefunden und war selber sehr frustriert:
lcd.printByte(225) = ä
lcd.printByte(239) = ö
lcd.printByte(245) = ü
oder
lcd.print(" #ALT160# ") =ä
lcd.print(" #ALT139# ") =ö
lcd.print(" #ALT228# ") =ü
hab diese Information nirgends gefunden und war selber sehr frustriert:
lcd.printByte(225) = ä
lcd.printByte(239) = ö
lcd.printByte(245) = ü
oder
lcd.print(" #ALT160# ") =ä
lcd.print(" #ALT139# ") =ö
lcd.print(" #ALT228# ") =ü
Das wird aus dem Datenblatt des Display Controllers klar. Seite 17:
Kann man auch in Hex angeben. z.B.:
lcd.print("Ger\xE1t");
Wenn das Zeichen nach dem Hex-Code aber als Hex-Ziffer interpretiert werden kann muss man den String stückeln (z.B. "Ger\xE1""t")
Das Grad-Zeichen findest man so auch in der Tabelle (0xDF)
Die Auflistung in dem Post #1 ist aber nicht für jedes LCD richtig, da sollte man schon ins Datenblatt schauen.
Aber so auf die schnelle für den Anfänger kann man die Auflistung wohl zeigen, wenns nicht richtig darstellt, wird der sich noch melden.
Ich hatte nämlich schon das vergnügen damit, bis ich auf die Idee kam die Auflistung ist nicht für mein LCD.
hab gerade selber gemerkt das meine version nicht wirklich zuverlässig funktioniert.
Und das mit dem \ im string hab ich nicht gekannt. funktioniert aber zuverlässig.
Also danke für den Hinweis.
BTW: gibt es eine Möglichkeit den ASCII Tabel zu ändern (temporär im projekt) damit die umlaute gleich richtig interpretiert werden?
Der Zeichensatz steht fest im ROM des Displays.
Und die Umlaute sind auch nicht Teil des Standard ASCII Satzes. Der geht nur bis 127. Darüber gibt es Erweiterungen, aber in mehreren Versionen
Du könntest die Umlaute aber selber zeichnen.
Ein Zeichen wird in einer 8x5 Matrix erstellt:
byte customChar[8] = { // So hast Du die Matrix vor Dir (so halbwegs), 0=bleibt dunkel, 1=leuchtet
B01010 ,
B00000 ,
B01110 ,
B10001 ,
B10001 ,
B10001 ,
B10001 ,
B01110
}; // soll ein ö sein, ungetestet
Das ist zwar Spielerei aber es gibt Programme, da kannst Du ne Schriftart laden und verändern und da kann man jedes Pixel bearbeiten. Mit so einem Programm würde ich das Vorzeichnen. Vielleicht gibt es was, das auch gleich anzeigt wie es wirklich am Display ausschaut.
lg dony
Damit muss man die Umlaute aber immer noch per Hand in den Text einfügen. Lediglich die Zahl dafür ist einfacher zu merken
Android Appstore:
LCD for Arduino
LCDsketcher 4 Arduino
Arduino Character Creator
usw...
Ja, stimmt natürlich. Da sich die ASCII Tabelle aber nicht ändern läßt, zumindest nicht so einfach, ist es besser als nichts. IMHO
Das sind dann max. 6 Buchstaben, die selten vorkommen. Wenn es um Schönheit geht ist es mir die Mühe wert aber das muss jeder für sich entscheiden.
lg dony
Wie es mir immer in den Fingern juckt, wenn ich seh zB "zumindest nicht so einfach"
Wär doch mal ein Projekt für combie, ROMs auslesen und beschreiben.
skorpi080:
Wie es mir immer in den Fingern juckt, wenn ich seh zB "zumindest nicht so einfach"Wär doch mal ein Projekt für combie, ROMs auslesen und beschreiben.
Das kenne ich, hab auch an sowas gedacht. Aber wie Du sagst, das wäre (vielleicht) was für combie. Oder auch für jemanden anders. Bin noch nicht soo lange im Forum.
lg dony
Hallo,
meines wissen wird der 44780 nicht mehr hergestellt, wenn er also echt
ist, dann sollte das:
/*
LiquidCrystal Library - Special Chars
*/
#include <LiquidCrystal.h>
//set constants for number of rows and columns to match your LCD
const int numRows = 2;
const int numCols = 16;
// defines for some useful symbols
const byte degreeSymbol = B11011111;
const byte piSymbol = B11110111;
const byte centsSymbol = B11101100;
const byte sqrtSymbol = B11101000;
const byte omegaSymbol = B11110100; // the symbol used for ohms
byte charCode = 32; // the first printable ascii character
int col;
int row;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
lcd.begin(numRows, numCols);
showSymbol(degreeSymbol, "degrees");
showSymbol (piSymbol, "pi");
showSymbol(centsSymbol, "cents");
showSymbol(sqrtSymbol, "sqrt");
showSymbol(omegaSymbol, "ohms");
lcd.clear();
}
void loop()
{
lcd.print(charCode);
calculatePosition();
if(charCode == 255)
{
// finished all characters so wait another few seconds and start over
delay(2000);
lcd.clear();
row = col = 0;
charCode = 32;
}
charCode = charCode + 1;
}
void calculatePosition()
{
col = col + 1;
if( col == numCols)
{
col = 0;
row = row + 1;
if( row == numRows)
{
row = 0;
delay(2000); // pause
lcd.clear();
}
lcd.setCursor(col, row);
}
}
// function to display a symbol and its description
void showSymbol( byte symbol, char * description)
{
lcd.clear();
lcd.write(symbol);
lcd.print(' '); // add a space before the description
lcd.print(description);
delay(3000);
}
einfach so durchlaufen.
Und wenn mich nicht alles täuscht, dann ist es die Arduino IDE- die die
Sonderzeichen nicht richtig verarbeitet, oder die Lib.
Im ROM des 44780 sind 2 Zeichensätze hinterlegt, vielleicht kann man auch
die zweite Seite im ROM aufrufen.
Gruß und Spaß
Andreas
SketchQuelle: Arduino Kochbuch
Grüße Uwe
Den ROM kann man nicht ändern, ist klar. Aber tauschen und davor einmal beschreiben. Aber das ist sicher nicht leicht und ich wüsste gar nicht wo ich beginnen sollte.
edit: Alles nur theoretisch/hypotetisch!
lg dony
Ich wüsste schon wo ich anfangen würde.... gogel
dony:
Den ROM kann man nicht ändern, ist klar. Aber tauschen und davor einmal beschreiben.
Das ROM ist im HD44780; :o :o :o :o :o :o wie willst Du das tauschen?
Na irgendwie haben die es doch beschrieben, dann könnte man es auch wieder beschreiben!
Echt jetzt? Ein Read Only Memory nochmal beschreiben?
Geht maximal einmal, und Du brauchst einen guten Medizienmann, der die Rauchzeichen deutet
Gruß André
Na klar echt jetzt!
Woher soll man was lesen können wenn man es nicht einmal beschreiben kann?
Ist jetzt alles halbwissen, aber logisches denken