Problemas con TFTLCD

#include <Adafruit_GFX.h> // Hardware-specific library
#include <MCUFRIEND_kbv.h>

MCUFRIEND_kbv tft;


const int analogPin = A5;
int value;      //variable que almacena la lectura analógica raw
int position;   //posicion del potenciometro en tanto por ciento


#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define GRAY    0x8410

void setup()
{
    tft.reset();
    uint16_t identifier = tft.readID();
  tft.setRotation(1);
    tft.begin(identifier);
    tft.fillScreen(BLACK);
 
 tft.fillScreen(0x0000);
  tft.setTextColor(YELLOW);
    tft.setCursor(15, 0);
    tft.setTextSize(3);
    tft.println("POTENCIOMETRO");
    tft.invertDisplay(false);
}

void loop()
{
 
   tft.setTextColor(CYAN);
  value = analogRead(analogPin);          // realizar la lectura analógica raw
   position = map(value, 0, 1023, 0, 100);  // convertir a porcentaje

   tft.setCursor(15, 40);
    tft.setTextSize(1 );
  tft.print("NIVEL POTENCIOMETRO %");
 
  tft.setCursor(15, 80);
    tft.setTextSize(2);
  tft.println(position);

}

Hola Amigos,

Tengo que mostrar la posición de un potenciometro en % en una TFT LCD de 2,4" de la compañia MCU Friend, pero tengo el problema de que se sobreescribe en la misma posición los datos y no se pueden visualizar.
Cuando inicio arduino el primer valor se muestra perfecto, pero cuando muevo el potenciometro, ya no.
Estoy muy verde con arduino, y con el tft ya ni os cuento.

Este es el código que estoy utilizando:

Hi,
Tienes que convertir los count a voltaje. value = (5.0/1023.0) * analogRead(analogPin); Estoy usando floating point para que tengas mejor presicion en la conversion.

Hola Tauro,
No te he entendido muy bien, sobre todo en lo que dices de floating point, ¿te refieres a que declare la variable "value" como float?

Si claro.

Pero si estoy "mapeando el valor" y convirtiendo la entrada analógica, para que me muestre un valor entero, no creo que haga falta declarar una variable float, no:

value = analogRead(analogPin);          // realizar la lectura analógica raw
  position = map(value, 0, 1023, 0, 100);  // convertir a porcentaje

Hi,
Creo que te mal entendi y pido disculpas pues creia que estabas usando la senal analoga. Normalmente cuando haces funciones matematicas tienes mas precision pero si no la necesitas no uses floating point. Estas usando el valor de 0 a 1024 en counts y lo conviertes a porciento. Sugerencia has un listado de la variable "position" a la pantalla para que veas como el valor varia o cambia cuando mueves el potenciometro. Asi sabras si el problema esta en la funcion o al desplegarla en el TFTLCD

Buenas,
Creo que el problema está en el manejo que estoy haciendo del TFT. Con los ejemplos de las librerias todo va perfecto, pero con este código tan simple no...Esta claro que algo está mal. He puesto en el código para poder ver lo que ocurre a través del puerto serie y se ve perfectamente el porcentaje del potenciometro.
Pero a través del TFT solo se ve perfecto cuando cargamos el código o cuando apagamos y encendemos arduino, si movemos el potenciómetro ya no se ve.

Tengo que mostrar la posición de un potenciometro en % en una TFT LCD de 2,4" de la compañia MCU Friend, pero tengo el problema de que se sobreescribe en la misma posición los datos y no se pueden visualizar.

Para resolver problemas de este tipo usas sprintf

void loop() {
  char buffer[30];

  tft.setTextColor(CYAN);
  value = analogRead(analogPin);          // realizar la lectura analógica raw
  position = map(value, 0, 1023, 0, 100);  // convertir a porcentaje

  tft.setCursor(15, 40);
  tft.setTextSize(1 );

  sprintf(buffer, "NIVEL POTENCIOMETRO %4d", position); // <== ESTA ES LA FUNCION MARAVILLA
  tft.setCursor(15, 80);
  tft.setTextSize(2);
  tft.println(buffer);

}

Hi,
Yo tuve un problema parecido y creo que lo que estaba haciendo mal fue como llamaba las linea. Tiene que hacerlo sumando los dot row que componen un caracter para enviar la informacion a la segunda linea de caracteres. Me parece que un caracter tenia 6 lineas de dot. Cuando llamaba la segunda linea le anadia 6 y asi fue como pude usarla. No quiere decir que sea el mismo problema tuyo es una sugerencia

Surbyte, lo voy a probar en breve y digo algo. Gracias por responder.
Tauro, gracias por responder, pero estoy tan verde...que no me aclaro con tu respuesta :frowning:

¿puedes ponermelo a modo de ejemplo? :slight_smile:

Sigue igual surbyte.... :frowning:

Ese comando que te puse mantiene el mismo lugar para toda la cadena de caracteres presentes en buffer
Si el posicionamiento esta mal pues corrígelo. Yo no veo tu display y a veces tienes que corregir las sugerencias porque no vemos el contexto completo.

  tft.setCursor(15, 40);
  tft.setTextSize(1 );

  sprintf(buffer, "NIVEL POTENCIOMETRO %4d", position); // <== ESTA ES LA FUNCION MARAVILLA
  
  tft.println(buffer);

Supongo que tft.setCursor(15, 80);

no ayudaba, veamos si posicionandolo en 15,40 todo el texto se presenta de modo correcto.
Te aseguro que es la solución.

Hi,
Sugerencia porque no haces un simple sketch usando un loop 0 al 9 y los printea y mira a ver que pasa. Asi tienes una idea de lo que estas haciendo mal. A la misma vez cambias las lineas.