anasell Posted May 22, 2013 at 11:09 AM Share Posted May 22, 2013 at 11:09 AM Hallo Zusammen, ich nutze in meinem PHP Script Custom Chars um eigene Symbole auf dem Display anzuzeigen. In der Doku steht, dass man bis zu 8 eigene Symbole verwenden kann, welche von 0-7 Adressiert werden können. Leider Funktioniert bei mir das Symbol welches auf der 0 liegt nicht, hier wird nur Schrott ausgegeben. Index 1-7 funktionieren hervorragend, Index 8 ist scheinbar schon für das Yen-Zeichen reserviert. Mein Programm sieht so aus: //Haus Symbol $CC[0] = 0b00000100; $CC[1] = 0b00001010; $CC[2] = 0b00010001; $CC[3] = 0b00011111; $CC[4] = 0b00010001; $CC[5] = 0b00010001; $CC[6] = 0b00011111; $CC[7] = 0b00000000; $lcd->setCustomCharacter(0,$CC); $lcd->writeLine(0, 0, "\0"); Hat jemand eine Idee wo der Fehler liegen könnte? Vielen Dank im Voraus! MfG Marco Quote Link to comment Share on other sites More sharing options...
borg Posted May 22, 2013 at 11:18 AM Share Posted May 22, 2013 at 11:18 AM Die 8 Symbole werden mit 8-15 addressiert, nicht mit 0-7. 0-7 konnten wir nicht nehmen, da die 0 das String-Ende kennzeichnet. Das 1-7 funktionieren ist zufall . Quote Link to comment Share on other sites More sharing options...
anasell Posted May 22, 2013 at 11:37 AM Author Share Posted May 22, 2013 at 11:37 AM Vielen Dank für deine schnelle Antwort, Verwende ich die 8 oder die 9 gibt das Display das Yen Zeichen und dann die Zahl 8 oder 9 aus. Habe ich sonst irgendetwas falsch gemacht? Quote Link to comment Share on other sites More sharing options...
anasell Posted May 22, 2013 at 12:24 PM Author Share Posted May 22, 2013 at 12:24 PM hab noch ein wenig getüftelt, es funktioniert komischerweise wenn man bei $lcd->setCustomCharacter den Index 8-15 verwendet, bei der Ausgabe den Index \10 -\17 ... komische Geschichte Quote Link to comment Share on other sites More sharing options...
photron Posted May 22, 2013 at 12:47 PM Share Posted May 22, 2013 at 12:47 PM Wie sieht denn dein writeLine Aufruf aus? So schreibst du den Custom Character 0: $lcd->writeLine(0, 0, "\x08"); Wobei '\x08' nicht das gleich wie "\x08" ist, denn in '' interpretiert PHP das nicht wie gewünscht. Quote Link to comment Share on other sites More sharing options...
anasell Posted May 22, 2013 at 01:10 PM Author Share Posted May 22, 2013 at 01:10 PM Funktioniert bei mir grad so: $lcd->setCustomCharacter(8,$CC); $lcd->writeLine(0, 0, "\10"); bei Set verwende ich 8-15 bei writeline \10 - \17 ich bin leider blutiger Anfänger und bin mir nicht sicher ob ich das so lassen kann oder lieber abändern sollte Lieben Dank Quote Link to comment Share on other sites More sharing options...
photron Posted May 22, 2013 at 01:30 PM Share Posted May 22, 2013 at 01:30 PM Dass das bei dir so funktioniert liegt daran dass a) du da gerade einen Bug im Plugin des LCD 20x4 Bricklets gefunden hast. 8 als index ist eigentlich nicht zulässig, der Bug führt aber dazu dass das als 0 interpretiert wird und damit den ersten Custom Character wählt. b) in PHP "\10" als oktal interpretiert wird und damit das gleiche meint wie "\x08" nämlich ASCII Code 8. Auf diesem ASCII Code liegt der erste Custom Character. Wie borg schon sagt können wir den ASCII Code 0 nicht nehmen, da der String-Ende bedeutet. Deswegen das Offset von 8 zwischen dem setCustomCharacter index (0-7) und den ASCII Codes (8-15) für die Custom Characters. Du kannst also bei $lcd->writeLine(0, 0, "\10"); bleiben, solltest aber doch $lcd->setCustomCharacter(0,$CC); nehmen, damit dass mit der korrigierten Version des Plugins dann auch noch funktioniert. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.