Compañeros, estoy intentando mostrar un dato de peso en una pantalla TFT de 3.95, pero los numeros me salen montados encima de los los mismos numeros, ya que recibo datos continuamente intente mostrar el mismo dato con color de texto amarillo y luego negro, pero me da un efecto parpadeante nada estetico.
Mi consulta seria, como podria hacer visualizar el dato en la pantalla y luego me borre el dato anterior y asi consecutivamente, para que no me aparescan los datos uno encima de otro.
este es el fragmento demi codigo donde visualizo el dato.
//Estas son las librerias que uso//
#include <Adafruit_TFTLCD.h> // Libreria de LCD
#include <TouchScreen.h> // Libreria del panel tactil
#include <Adafruit_GFX.h> // Hardware-specific library
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
tft.fillScreen(NEGRO);
if(Serial1.available()>0){
numero = Serial1.parseFloat();
tft.setTextSize(5); // TAMAÑO DE FUENTE 2 //System font is 8 pixels. ht = 8*2=16
tft.setTextColor(AMARILLO); // SELECCIONAMOS COLOR DE TEXTO ROJO CON FONDO NEGRO
tft.setCursor(15,100); // COLOCAMOS EL CURSOR X,Y
tft.print(numero); // ESCRIBIMOS
La solución a ese problema es convertir el número que deseas mostrar en pantalla en una cadena de caracteres con la instrucción sprintf.
Video: Ejemplo con sprintf en un TFT
Aunque en el ejemplo uso una pantalla diferente a la que tienes, el principio de uso de la instruccción es la misma.
PD: esa pantalla del ejemplo, usa una fuente base bien hecha, esto es, cada uno de los caracteres tiene un espacio en pixeles uniforme, idéntico para todos los caracteres, con ello se consigue una buena superposición, sin que queden pixeles remanentes
Fuente mal construida

Fuente corregida caracter por caracter:

Que bien q me hallas respondido tu TFTLCDCyg, bueno te cuento que yo recibo datos continuos de peso de otro arduino hacia mi arduino mega(donde tengo mi pantalla TFT de 3.95), yo recibo datos tipo float con 3 decimales ejm. 8.595 y usando la instruccion sprintf no me funciona con float.
Estuve averiguando y ahora estoy usando la instruccion dtof( Para convertir float a caracteres) que creo que es casi similar a sprintf, pero aun sigo con el mismo problema no se en que este fallando, pues a la hora de mostrar el peso en la pantalla se introducen algunos digitos a la izquierda que se me hace imposible borrar.
adjunto mi nuevo codigo.
char Peso[4];
float numero;
void setup()
{
Serial3.begin(9600);
Serial.begin(9600);
tft.reset();
uint16_t id = tft.readID();
tft.begin(id);
tft.setRotation(0); // PONEMOS LA PANTALLA VERTICAL: 0=VERTICAL, 1=HORIZONTAL
tft.fillScreen(NEGRO); // PINTAMOS DE NEGRO EL COLOR DE FONDO DE LA PANTALLA
}
void loop(){
if(Serial3.available()){
numero = Serial3.parseFloat();
dtostrf(numero, 1, 3, Peso);
tft.setCursor(15, 100);
tft.setTextSize(4);
tft.setTextColor(AMARILLO, NEGRO);
tft.println(Peso);
}
Con decimales solo hay que manejar múltiplos base 10. Esto introduce algunos cálculos mas, pero el micro los puede tolerar sin problemas.
Por ejemplo, si el tiene una lectura de 25.5 C, hay que multiplicar el resultado por 10, para obtener 255, lo almacenamos en una nueva variable entera, con esa operación conservas 1 decimal (la llamaremos Ndec)
Luego obtienes el entero de 25.5 y lo almacenas en otra variable tipo int (N por ejemplo), la multiplicas nuevamente por 10 y en este caso obtendrás 250, el cual almacenarás en una variable tipo int intermedia (Nint). Aquí solo tendremos la parte entera.
Para obtener los decimales, basta con obtener la diferencia Ndec-Nint y la almacenas en una variable intermedia (Dec).
Luego aplicas spritf uniendo a N con Dec.
sprinf(TX, "%02d.%01d", N, Dec);
Metes el grupo de instrucciones en una función, a la que incluso puedes asignarle varios select case, para presentar el número flotante con varios formatos, como por ejemplo, sin decimales, un decimal, dos decimales, etc.
Una cosa más, en todas las librerias para TFT de Adafruit, la definición del color del texto tiene dos argumentos:
tft.setTextColor(Color de la fuente, Color del fondo);
dtostrf y sprintf funcionan mejor cuando estableces la definición de color del texto con los dos argumentos.
Gracias TFTLCDCyg,lo solucione como me dijiste y quedo perfecto, ah tengo una consulta mas, estoy escribiendo los nombre de algunos colores en una sola posicion (ROJO,AZUL,VIOLETA,AMARILLO,NEGRO,VERDE,CYAN,BLANCO), El problema es que cuando escribo ROJO y luego escribo encima AMARILLO,ME SOBRAN CUATRO LETRAS A LA IZQUIERDA, y asi consecutivamente con los demas colores,
Adjunto el codigo con la solucion anterior:
if(Serial3.available()){
numero = Serial3.parseFloat();
positivo = int(numero);
decimal = int((numero - positivo) * 1000);
sprintf(Peso, "%d.%03d", positivo, decimal);
tft.setCursor(110, 45);
tft.setTextSize(5);
tft.setTextColor(NEGRO, NEGRO);
tft.print("-");
tft.setTextColor(AMARILLO, NEGRO);
tft.print(Peso);
}
y este es el codigo de los colores que me esta dando dolores de cabeza
char *color[]={"ROJO"," AZUL","VIOLETA","AMARILLO","NEGRO","VERDE","CYAN","BLANCO"};
tft.setCursor(200,130);
tft.setTextSize(2);
tft.setTextColor(BLANCO, NEGRO);
tft.println(color[i]);