Hola a tod@s,
Tengo un comportamiento raro con una pantalla LCD 16x2 conectada con I2C y controlada por la libreria LiquidCrystal_I2C.
El caso es que tengo creados 6 caracteres especiales (posición de memoria del 0 al 5), los cuales puestos en orden (3 en la linea de arriba y 3 en la de abajo) completan un icono más grande.
Si pongo este código:
lcd.clear(); //Borra el LCD
lcd.home(); //Devuelve el cursor a 0,0
lcd.write(0); lcd.write(1); lcd.write(2); //Imprime las 3 partes de arriba
lcd.setCursor(0, 1); // Pone el cursor al principo de la seguna linea del LCD
lcd.write(3); lcd.write(4); lcd.write(5); //Imprime las 3 partes de abajo
Funciona perfectamente.
Pero si pongo este:
lcd.clear(); //Borra el LCD
lcd.home(); //Devuelve el cursor a 0,0
lcd.print(F("\000\001\002"));//Imprime las 3 partes de arriba
lcd.setCursor(0, 1);// Pone el cursor al principo de la seguna linea del LCD
lcd.print(F("\003\004\005")); //Imprime las 3 partes de abajo
Sólo imprime correctamente la linea de abajo.
He probado esto:
lcd.clear();
lcd.home();
lcd.setCursor(0, 1);
lcd.print(F("Compa\356ero"));
Imprimer perfectamente la palabra "Compañero", la "ñ es el caracter 356(octal) del propio set de caracteres del LCD. Si lo imprimo en la linea de arriba del LCD sale "Compa ero".
He probado tambien a quitar la función F, poner lcd.setCursor(0,0); y varias combinaciones más. Incluso a ponerlo en una variable String, pero no, no funciona en la linea de arriba.
¿sabe alguien poque puede estar pasando esto? ¿es alguna limitación de la librería? ¿un bug?...
Ya es sólo por curiosidad porque con el primer código funciona perfectamente. La ventaja (que le veo) es que puedo mandar cadenas a una función que imprima cualquier texto, y así puedo poner el icono grande formado por los caracteres especiales junto a varios textos directamente, sin tener que hacer:
[/code]
lcd.clear();
lcd.home();
lcd.print ("Hola ";)
lcd.write(0); lcd.write(1); lcd.write(2); //Imprime las 3 partes de arriba
lcd.setCursor(0, 1);
lcd.print(F("2018 "));
lcd.write(3); lcd.write(4); lcd.write(5); //Imprime las 3 partes de abajo
Y así hacer una funcion para cada texto que necesite o una que analice el texto y sepa donde tiene que poner el icono completo.
Muchas gracias por vuestra atención.