Hola a todos, escribo este post para pedir una ayuda con un proyecto que tengo, estoy visualizando un valor de un sensor de temperatura en una pantalla TFT de 2.4" que esta en un arduino Mega. Tengo dos problemas cuando visualizo el valor del sensor, el primero es que se me superpone el valor anterior con el actual y el segundo es que pareciera que se me llena el arreglar char que tengo porque llega un punto que me escribe cualquier cosa.
Vi unos post en internet para solucionar la superposición pero realmente no logre solucionarlo Link del post
Aqui va el codino donde estoy imprimiendo
include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
// Pines de conexion del LCD
#define LCD_CS A3 // Chip Select - Pin analogico 3
#define LCD_CD A2 // Command/Data - Pin Analogico 2
#define LCD_WR A1 // LCD Write - Pin Analogico 1
#define LCD_RD A0 // LCD Read - Pin Analogico 0
#define LCD_RESET A4 // LCD Reset - Pin Analogico 4
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Instancia del LCD
#define BLACK 0x0000 // Definimos los colores para poder referirnos a ellos con su nombre
#define AZUL 0xF800 // en lugar de usar el código hexadecimal de cada uno.
#define GREEN 0x07E0
#define WHITE 0xFFFF
#define ROJO 0x001F
#define CYAN 0x07FF
#define AZULMARINO 0xFFE0
#define MAGENTA 0xF81F
uint16_t identifier = 0x9341;
float temperatura = 0.0;
char tmp[50];
void setup() {
// put your setup code here, to run once:
Serial1.begin(9600); // Inicia la comunicacion por (Tx1 y Rx1)
Serial.begin(9600); // Inicia la comunicacion por (Tx0 y Rx0) con el computador
Serial1.flush();
tft.reset();
tft.begin(identifier);
tft.fillScreen(BLACK); // Colocamos el fondo del LCD en Negro
}
void loop() {
if (Serial1.available() > 7)
{
Serial1.readBytes((byte*)&temperatura, 4);
}
Serial.println(temperatura);
tft.setRotation(90); // Establecemos la posición de la pantalla Vertical u Horizontal
//_-------------------Humedad------------
tft.setCursor(40, 20); // Situamos el cursor en la posicion del LCD deseada,
// (X, Y) siendo X el ancho (240 px max.) e Y el alto (320 px max.)
tft.setTextSize(2); // Definimos tamaño del texto. (Probado tamaños del 1 al 10)
tft.setTextColor(AZULMARINO); // Definimos el color del texto
tft.println("Hum"); // Escribimos nuestro texto en el LCD. Realizará un salto de linea
// automatico si el texto es mayor que el tamaño del LCD
tft.drawLine(35, 40, 80, 40, AZULMARINO); // Dibujamos una linea (Punto inicio X, Punto inicio Y, Punto final X, Punto final Y, Color)
//--------------------Temperatura----------------
tft.setCursor(150, 20); // Situamos el cursor en la posicion del LCD deseada,
// (X, Y) siendo X el ancho (240 px max.) e Y el alto (320 px max.)
tft.setTextSize(2); // Definimos tamaño del texto. (Probado tamaños del 1 al 10)
tft.setTextColor(GREEN); // Definimos el color del texto
tft.println("Temp"); // Escribimos nuestro texto en el LCD. Realizará un salto de linea
// automatico si el texto es mayor que el tamaño del LCD
tft.drawLine(145, 40, 200, 40, GREEN); // Dibujamos una linea (Punto inicio X, Punto inicio Y, Punto final X, Punto final Y, Color)
float X = temperatura; // Almacenamos en la variable entera X el ancho del LCD en pixeles mediante tft.width();
dtostrf(X,50,2,tmp);
int Y = 0 ; // Almacenamos en la variable entera Y el alto del LCD en pixeles mediante tft.height();
//------------------------Valores----------------------
tft.setCursor(40, 50); // Situamos el cursor en una nueva posicion del LCD
tft.setTextSize(2); // Definimos tamaño del texto.
tft.setTextColor(WHITE); // Definimos el color del texto
tft.println(tmp); // Imprimimos por pantalla el valor de las variables en decimal
tft.setCursor(155, 50); // Situamos el cursor en una nueva posicion del LCD
tft.setTextSize(2); // Definimos tamaño del texto.
tft.setTextColor(WHITE);
tft.println(Y, DEC);
}
(Corte la parte de las figuras del código porque era muy largo), la parte de en la cual estoy imprimiendo el valor de temperatura es
float X = temperatura; // Almacenamos en la variable entera X el ancho del LCD en pixeles mediante tft.width();
dtostrf(X,50,2,tmp);
int Y = 0 ; // Almacenamos en la variable entera Y el alto del LCD en pixeles mediante tft.height();
//------------------------Valores----------------------
tft.setCursor(40, 50); // Situamos el cursor en una nueva posicion del LCD
tft.setTextSize(2); // Definimos tamaño del texto.
tft.setTextColor(WHITE); // Definimos el color del texto
tft.println(tmp); // Imprimimos por pantalla el valor de las variables en decimal
y final mente les muestro que me aparece en el serial, donde al principio funciona de maravilla y luego comienza a tomar cualquier valor
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
29.81
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
12.12
0.00
Bueno muchas gracias
espero me puedan ayudar de verdad se los agradecería un monto !!