how can I check my dimensions on the LCD-TFT?

:confused:

hi I´m new using the tft library and i have a problem finding the location of my area to be sensed.

I already managed to draw the buttons that I want, where I want. the problem is that when I try to assign some actions to these buttons with “IF” conditionals, I can´t locate well the detected area in “X” position.
in “Y” position I can see that the detected value differs.

I´m posting a part of the code, so if you can find some error, please let me know, and if you have an idea to solve this I will be very grateful!

thank you!

void loop()
{
  while (true) {
    lecturaPanel(); // Realizamos lectura del panel para detectar presion y coordenadas

    // Si la pulsación del eje X se produce entre los puntos 40 y 160
    // Y la pulsacion del eje Y se produce entre los puntos 20 y 60
    // Y la presión realizada esta entre el margen determinado

    if ((Y >= 20 && Y <= 40) && (X >= 210 && X <= 230) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (rpmfirst <= 4500))
    {
      //ERASE
      tft.setTextColor(WHITE);
      tft.setCursor(65, 25); // Colocamos el cursor
      tft.setTextSize(10);
//      tft.println(rpmfirst);
      tft.println(X);

      tft.setCursor(65, 25); // Colocamos el cursor
      tft.setTextSize(10);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      rpmfirst = rpmfirst + 50;

//      tft.print(rpmfirst); // Escribimos por pantalla
      tft.println(X);
      delay(150);

    }


    if ((Y >= 5 && Y <= 55) && (X >= 140 && X <= 175) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (rpmfirst >= 0))
    {
      //ERASE
      tft.setTextColor(WHITE);
      tft.setCursor(65, 25); // Colocamos el cursor
      tft.setTextSize(10);
      tft.println(rpmfirst);

      tft.setCursor(65, 25); // Colocamos el cursor
      tft.setTextSize(10);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      rpmfirst = rpmfirst - 50;

      tft.println(rpmfirst); // Escribimos por pantalla

      delay(150);
    }
void lecturaPanel()
{
  digitalWrite(13, HIGH);
  TSPoint p = ts.getPoint(); // Realizamos lectura de las coordenadas
  digitalWrite(13, LOW);

  pinMode(XM, OUTPUT); // La librería utiliza estos pines como entrada y salida
  pinMode(YP, OUTPUT); // por lo que es necesario declararlos como salida justo
  // despues de realizar una lectura de coordenadas.

  // Mapeamos los valores analogicos leidos del panel tactil (0-1023)
  // y los convertimos en valor correspondiente a la medida del LCD 320x240
//   X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
//  Y = map(p.y, TS_MAXY, TS_MINY, tft.height(), 0);
  //si la configuracion anterior de pantalla no funciona
  //ensaya esta
  X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
  Y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
  Z = p.z;
}
void loop()
{
  while (true) {

The loop() function is already called in an infinite loop. Lose the while loop.

Your open and close curly braces do not match. You can not make ANY claims about the code working when it won't even compile.

it does compile. I didnt upload the entire code because it’s large and is commented in spanish. but if you want to see, i’m uploading it here:

// Modified TFT_paint sketch from Adafruit_TFTLCD Library for

#include <Adafruit_GFX.h>    // Libreria de graficos
#include <Adafruit_TFTLCD.h> // Libreria de LCD 
#include <TouchScreen.h>     // Libreria del panel tactil

// Pines necesarios para los 4 pines del panel tactil
//#define YP A1 // Pin analogico A1 para ADC
//#define XM A2 // Pin analogico A2 para ADC
//#define YM 7
//#define XP 6
////////////////////otra configuracion de pines
#define YP A2 // Pin analogico A2 para ADC
#define XM A1 // Pin analogico A1 para ADC
#define YM 6
#define XP 7
//////////////////

// Definimos la presion máxima y minima que podemos realizar sobre el panel
#define MINPRESSURE 1
#define MAXPRESSURE 1000

// Para mejor precision de la presion realizada, es necesario
// medir la resistencia entre los pines X+ y X-.
// En Shield TFT 2.4" LCD se mide entre los pines A2 y 6
// Instancia del panel tactil (Pin XP, YP, XM, YM, Resistencia del panel)
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 654);

short TS_MINX = -400; // Coordenadas del panel tactil para delimitar
short TS_MINY = -400; // el tamaño de la zona donde podemos presionar
short TS_MAXX = 1600; // y que coincida con el tamaño del LCD
short TS_MAXY = 1000;

#define LCD_CS A3   // Definimos los pines del LCD
#define LCD_CD A2   // para poder visualizar elementos graficos
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define	BLACK   0x0000  // Definimos los colores 
#define	BLUE    0x001F  // que utilizaremos para 
#define	RED     0xF800  // el texto y los elementos graficos
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Instancia LCD

int X; // Variables que almacenaran la coordenada
int Y; // X, Y donde presionemos y la variable Z
int Z; // almacenara la presion realizada

int a = 0; // variable "flag" para control rebotes
int rpmfirst = 2000;
int aceleracion = 0;
int desaceleracion = 0;

#define led 22


void setup(void)
{
  tft.begin(0x9325); // Iniciamos el LCD especificando el controlador

  tft.fillScreen(WHITE); // Pintamos la pantalla de Rojo


  pinMode(13, OUTPUT);
  pinMode(22, OUTPUT);//LED


  tft.drawRect(130, 60, 95, 240, WHITE); // visualizacion de revoluciones
  tft.drawRect(15, 60, 75, 90, WHITE); // visualizacion de nivel de aceleracion
  tft.drawRect(15, 210, 75, 90, WHITE); // visualizacion de nivel de desaceleracion
  tft.fillTriangle(195, 10, 195, 50, 225, 30, RED);//triangulo superior de revoluciones
  tft.fillTriangle(180, 10, 180, 50, 150, 30, RED);//triangulo inferior de revoluciones
  tft.fillTriangle(60, 10, 60, 50, 90, 30, RED);//triangulo superior de aceleracion
  tft.fillTriangle(15, 30, 45, 50, 45, 10, RED);//triangulo inferior de aceleracion
  tft.fillTriangle(60, 160, 90, 180, 60, 200, RED);//triangulo superior de desaceleracion
  tft.fillTriangle(45, 160, 15, 180, 45, 200, RED);//triangulo inferior de desaceleracion
  ////////////////////
  tft.setRotation(1);//rotacion de pantalla


  // ACELERACIÓN
  //tft.setCursor(80, 155); // Colocamos el cursor
  //tft.setTextSize(10);   // Especificamos el tamaño del texto
  //tft.setTextColor(BLUE); // Definimos el color del texto
  //tft.println(aceleracion); // Escribimos por pantalla

  // DESACELERACIÓN
  //tft.setCursor(230, 155); // Colocamos el cursor
  //tft.setTextSize(10);   // Especificamos el tamaño del texto
  //tft.setTextColor(BLUE); // Definimos el color del texto
  //tft.println(desaceleracion); // Escribimos por pantalla


}

void loop()
{
while(true){
    lecturaPanel(); // Realizamos lectura del panel para detectar presion y coordenadas

    // Si la pulsación del eje X se produce entre los puntos 40 y 160
    // Y la pulsacion del eje Y se produce entre los puntos 20 y 60
    // Y la presión realizada esta entre el margen determinado

    if ((Y >= 10 && Y <= 50) && (X >= 210 && X <= 230) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (rpmfirst <= 4500))
    {
       //ERASE
      tft.setTextColor(WHITE);
      tft.setCursor(65, 25); // Colocamos el cursor
    tft.setTextSize(10);
   tft.println(rpmfirst);
   //tft.println(Y);
   
      tft.setCursor(65, 25); // Colocamos el cursor
      tft.setTextSize(10);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      rpmfirst = rpmfirst + 50;

     tft.print(rpmfirst); // Escribimos por pantalla
//tft.println(Y);
      delay(150);
     
         }


      if ((Y >= 5 && Y <= 55) && (X >= 140 && X <= 175) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (rpmfirst >= 0))
    {
       //ERASE
      tft.setTextColor(WHITE);
      tft.setCursor(65, 25); // Colocamos el cursor
    tft.setTextSize(10);
   tft.println(rpmfirst);
   
      tft.setCursor(65, 25); // Colocamos el cursor
      tft.setTextSize(10);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      rpmfirst = rpmfirst - 50;

      tft.println(rpmfirst); // Escribimos por pantalla

      delay(150);
          }


    if ((Y >= 5 && Y <= 55) && (X >= 60 && X <= 90) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (aceleracion <= 9))
    {
      tft.setCursor(80, 155); // Colocamos el cursor
      tft.setTextSize(8);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      aceleracion = aceleracion + 1;

      tft.print(aceleracion); // Escribimos por pantalla

      delay(150);
    }
    
    if ((Y >= 5 && Y <= 55) && (X >= 0 && X <= 45) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (aceleracion >= 1))
    {
      tft.setCursor(80, 155); // Colocamos el cursor
      tft.setTextSize(8);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      aceleracion = aceleracion - 1;

      tft.print(aceleracion); // Escribimos por pantalla

      delay(150);
      

    }

    if ((Y >= 155 && Y <= 210) && (X >= 55 && X <= 100) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (desaceleracion <= 9))
    {
      tft.setCursor(230, 155); // Colocamos el cursor
      tft.setTextSize(8);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      desaceleracion = desaceleracion + 1;

      tft.print(desaceleracion); // Escribimos por pantalla

      delay(150);
      

    }

    if ((Y >= 155 && Y <= 210) && (X >= 0 && X <= 45) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (desaceleracion >= 1))
    {
      tft.setCursor(230, 155); // Colocamos el cursor
      tft.setTextSize(8);   // Especificamos el tamaño del texto
      tft.setTextColor(BLUE); // Definimos el color del texto
      desaceleracion = desaceleracion - 1;

      tft.print(desaceleracion); // Escribimos por pantalla

      delay(150);
      

    }

}
}
void lecturaPanel()
{
  digitalWrite(13, HIGH);
  TSPoint p = ts.getPoint(); // Realizamos lectura de las coordenadas
  digitalWrite(13, LOW);

  pinMode(XM, OUTPUT); // La librería utiliza estos pines como entrada y salida
  pinMode(YP, OUTPUT); // por lo que es necesario declararlos como salida justo
  // despues de realizar una lectura de coordenadas.

  // Mapeamos los valores analogicos leidos del panel tactil (0-1023)
  // y los convertimos en valor correspondiente a la medida del LCD 320x240
  // X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
  //Y = map(p.y, TS_MAXY, TS_MINY, tft.height(), 0);
  //si la configuracion anterior de pantalla no funciona
  //ensaya esta
  X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
  Y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
  Z = p.z;
}

because it’s large

It wouldn’t be nearly as large if you deleted the commented out code.

void loop()
{
while(true){

That useless infinite loop is still there. GET RID OF IT!

    if ((Y >= 10 && Y <= 50) && (X >= 210 && X <= 230) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (rpmfirst <= 4500))
    {

Why does it matter what X and Y are if the screen is not touched/pressed?

The first if statement should determine if the screen is pressed. NOTHING more. Inside the body of the if statement, executed when the screen is touched/pressed, it matters where. Only then.

       //ERASE
      tft.setTextColor(WHITE);
      tft.setCursor(65, 25); // Colocamos el cursor
    tft.setTextSize(10);
   tft.println(rpmfirst);
   //tft.println(Y);

Stop drinking while coding. This looks like a drunken sailor was in charge of the tab key. Use Tools + Auto Format BEFORE posting code again.

thank you so much for your suggestions, I had them in my consideration.

if it's okay with you, can you tell me how to detect the touch? is there a command for it? I thought of making this task by locating the touch.

another thing is that when I compile it doesn't go into the second "if". do you think that is due to the same problem that you see?

thank you for your thoughful replay.

Amaliaairi:
if it's okay with you, can you tell me how to detect the touch? is there a command for it?

That will be explained in the TFT library documentation.

if it's okay with you, can you tell me how to detect the touch?

If the X and Y values tell you where, then what is Z doing? Since you compare Z to MINPRESSURE and MAXPRESSURE, and proceed only if Z is between them, it seems reasonable to assume that Z being between MINPRESSURE and MAXPRESSURE means that the screen is being touched.