Hola
Tengo unos problemas con a librería UTFT, bueno, tal vez no sean con la propia librería.
El caso es que tengo un Arduino Mega y un shield TFT 2,8" con el driver IL9486. A base de mucho leer y probar he conseguido hacerla funcionar con la librería UTFT, pero no la original, sino la modificada por Prometec ya que la original con este driver, da una imagen en el espejo.
Como el shield lleva un slot para SD lo aprovecho para cagar bitmaps. Para ello he conseguido hacer funcionar las librerías SdFat, UTFT (link a la original) y UTFT_SdRaw conjuntamente para poder leer bitmaps desde la SD y funcionan perfectamente.
El caso es que tengo que imprimir unos valores que van cambiando y pretendo que vayan alineados con las letras RPM (p.e 1200 RPM) por el momento (más adelante debo presentar otro tipo de valores). Bien, pues después de haber probado mil cosas que he ido leyendo, no consigo que los valores cambien suavemente, si imprimo unos valores sobre otros, al final se convierten en un punto blanco de pixeles sin sentido, es decir se van machando unos a otros.
myScreen.setColor(VGA_WHITE);
myScreen.setFont(SevenSegNumFont);
myScreen.print(format_text(speed, 5), 250, 150);
Si imprimo después el mismo texto, pero con el mismo color que el fondo (para que se borren), se ven los valores, pero aparece un parpadeo molesto.
myScreen.setColor(VGA_WHITE);
myScreen.setFont(SevenSegNumFont);
myScreen.print(format_text(speed, 5), 250, 150);
myScreen.setColor(VGA_BLACK);
myScreen.print(format_text(speed, 5), 250, 150);
La función format_text
es para resolver otro problema que es el del alineamiento. Si por ejemplo hay un valor de 1100 y luego baja a 998, el 1 queda remanente hasta que vuelva a tener 4 dígitos. El problema de la alineación lo he resuelto con el snprint_P
. Me he preparado una función para formatear cualquier valor y que quede alineado a la derecha y a la izquierda ponga espacios.
// value: Valor para imprimir (double para que sea cualquier valor entero o decimal
//len: longitud del texto (por ejemplo, para valores xx.xx len=5
String format_text(double value, byte len){
char buffer[len] = " "; //Reserva un buffer para la String resultante
snprintf_P(buffer, len, PSTR("%3d"), value); //Formatea el texto
return buffer; //Devuelve el String formateado a la derecha
}
En teoría esto funciona bien si hay un set completo del font seleccionado. Dentro de la propia librería hay un font (SevenSegNumFont) que sólo lleva un set de números (0 al 9), por lo que cuando se formatea con snprintf_P
, al no tener el carácter "espacio" en el set del font, pone un carácter completo del tamaño del font, es decir un cuadro en blanco.
Mis preguntas son:
¿Alguna ayuda para poner una transición "suave" al imprimir los valores?
¿Como se puede añadir al SevenSegNumFont el caracter "espacio"? El SevenSegNumFont está dentro del archivo DefaultFonts.c
en las carpetas de la librería UTFT.
Gracias por vuestro tiempo.