Ciao a tutti
sono incappato in uno stupido problema che non riesco a risolvere..
ho montato lo schermo LCD classico HD44... e ho inviato tramite arduino una scritta qualsiasi tipo "Cotone 40°".
In realtà il simbolo dei gradi non mi viene visualizzato, ma viene emesso un altro simbolo.
Come posso risolvere?
smartgatto:
ho montato lo schermo LCD classico HD44... e ho inviato tramite arduino una scritta qualsiasi tipo "Cotone 40°".
In realtà il simbolo dei gradi non mi viene visualizzato, ma viene emesso un altro simbolo.
Potresti definirlo come uno degli otto simboli custom (funzione createChar) e scrivendolo a schermo con un write(), passandogli l'indice (da 0 a 7) dove hai definito il simbolo!
Credo che il problema sia da ricercare nel set di caratteri gestito dal controller HD44780; se fai qualche prova vedrai che hai anche problemi con le vocali accentate.
Ho capito...mannaggia...
il problema è che il mio display non è proprio l'originale ma è uno equivalente (tale162b-d rev a) per cui avrà una tabella diversa dall'originale hitachi..
più tardi ci studio un pò su...
// definizione del carattere °
byte gradi[8] = {
B01110,
B01010,
B01110,
B00000,
B00000,
B00000,
B00000,
B00000
};
// Al momento di usarlo vai sulla posizione del display:
lcd.setCursor(x,y);
lcd.print(gradi);
seguendo la tabella dei codici ascii dunque dovrei mettere:
lcd.print((char)248);
è giusto?
Il display non usa i codici ashii ma il suo set di caratteri. Esistono 2 versioni principali dei set dei caratteri. La versione HD44780A00: Japanese standard font e il HD44780A02:European standard font oltre a quello personalizzato per il cliente HD44780Bxx.
guarda le specifiche del HD44780: http://www.adafruit.com/datasheets/HD44780.pdf pagina 17 e 18
il ° corrisponde al 223 se hai la versione A00 del HD44780
Se hai la versione A02 (che suggerisce il R rovesciato) il ° é piú tozzo e corrisponde al 176.
Oltre a quanto detto da Uwe, c'è da specificare la questione sollevata da Menniti, e cioè il set di caratteri. Gli LCD HD44780 usano il set ASCII standard solo fino al 128° carattere (ASCII da 0 a 127). Oltre il 128° carattere è un po' una giungla.
Quindi segui il consiglio di Pelletta: ridefinisci un carattere e poi usa il suo codice per stamparti il simbolo dei gradi.
leo72:
fino al 128° carattere (ASCII da 0 a 127). Oltre il 128° carattere è un po' una giungla.
E' così perché lo standard ASCII definisce i caratteri solo da 0 a 127, i primi 32 (0-31) sono valori riservati per i vari comandi, p.e. new line o carriage return, dal trentaduesimo (32-127) in poi c'è l'alfabeto occidentale con tutti i simboli di uso comune, i caratteri dal 128 in poi servono per localizzazioni, alfabeti diversi, caratteri speciali, etc, e non sono definiti dallo standard.
smartgatto:
ma sulla riga lcd.print(gradi); mi restituisce l'errore "call of overloaded 'print(byte[8])' is ambiguous...
come mai?
Ovvio, non puoi stampare direttamente un array sotto forma di carattere utente, cosa che aveva già fatto notare Uwe.
Leggiti come usare i caratteri utente sul reference della liquid crystal.