Prendere asse x del punto premuto display Kuman

Buona sera a tutti.
Sono Daniele e ho bisogno di una per completare il mio progetto d’esame. La macchina che sto costruendo deve essere controllata da un display Touch. Il display che utilizzo è il 2.8" della Kuman.

Il problema che riscontro è che quando premo un punto qualsiasi sullo schermo la posizione x del punto premuto ritorna sempre 0. provando con i programmi demo forniti insieme allo schermo tutto funziona. Ma con il mio codice no. Sapete aiutarmi?

Di seguito inserisco il codice: essendo un estratto di un programma molto più ampio vi prego di segnalarmi se ho tralasciato qualcosa di troppo. Non ho riportato alcune define che definiscono il posizionamento e le dimensioni degli oggetti grafici. Grazie

//Librerie
#include <Elegoo_GFX.h>    // Graphic's library
#include <Elegoo_TFTLCD.h> // Specific HW library
#include <TouchScreen.h>  //Touch's library

//Piedinatura per iniziallizare l'LCD
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4

//Piedinatura inizializzazione touch
#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3// must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin

//Costanti mappatura touch
#define TS_MINX 120
#define TS_MAXX 900

#define TS_MINY 70
#define TS_MAXY 920

//Object Inizialization

Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

//Global Variables
Elegoo_GFX_Button pulsanti[3];
int indiceCottura;
int cotture[3] = {MINCOOKINGTIME, AVGCOOKINGTIME, MAXCOOKINGTIME};
bool monetaInserita;

void setup()	{
	Serial.begin(9600);//Comunicazione con PC
  
	tft.reset();
	
	  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);
  
  tft.reset();
uint16_t identifier = tft.readID();
 if(identifier==0x0101)
  {     
      identifier=0x9341;
  }else {
    identifier=0x9341;
  }

  tft.begin(identifier);
  
  tft.setRotation(2);
  tft.fillScreen(NERO);
}

void loop() {
  digitalWrite(13, HIGH);
  TSPoint p = ts.getPoint();
  digitalWrite(13, LOW);
  
  if (p.z > MINPRESS && p.z < MAXPRESS) {//Check the point pressed
    // scale from 0->1023 to tft.width
    p.x = (tft.width() - map(p.x, TS_MINX, TS_MAXX, tft.width(), 0));
    p.y = (tft.height()-map(p.y, TS_MINY, TS_MAXY, tft.height(), 0));
    Serial.println((tft.width() - map(p.x, TS_MINX, TS_MAXX, tft.width(), 0)));
    Serial.print("Pressed "); Serial.print(p.x);Serial.print(" "); Serial.println(p.y);
  }
    
   for (int i=0; i<4; i++) {//for each button
    if (pulsanti[i].contains(p.x, p.y)) {//if button is pressed
      pulsanti[i].press(true);
    } else {
      pulsanti[i].press(false);
    }
   }
  if(pulsanti[0].justPressed()) {//check if btn panino was pressed
    Serial.println("Premuto pulsante Panino");
    Serial.print("Tempo cottura: "); Serial.println(cotture[indiceCottura - 1]);
    form3_draw(cotture[indiceCottura - 1]);
  }
  if(pulsanti[1].justPressed()) {//chek if btn - was pressed
    Serial.println("Premuto pulsante - ");
    cambiaCottura(-1);
  }
  if(pulsanti[2].justPressed()) {// check if btn + was pressed
    Serial.println("Premuto pulsante + ");
    cambiaCottura(1);
  }  
}

void form1_draw() {
  Serial.println("Disegno form 1");
  tft.fillScreen(NERO);//Delete all from LCD
  
  Rettangolo_draw(0);//Draw the label with informations
  delay(WAITINGTIME);
  monetaInserita = true;
  Serial.println("Fine disegno form 1");
  form2_draw();
}

///Draw Scegli prodotto screen
void form2_draw()  {
  Serial.println("Disegno form 2");
  tft.fillScreen(NERO);//Delete all from screen
  
  Rettangolo_draw(1);//Draw the label with informations

  //Draw "Panino" Button
  pulsanti[0].initButton(&tft,XPANINO, YPANINO, WPANINO, HPANINO, BIANCO, BLU, BIANCO, "PANINO", 4 );
  pulsanti[0].drawButton();

  //Draw "-" Button
  pulsanti[1].initButton(&tft,XMENO, YMENO, WCOTTURA, HCOTTURA, BIANCO, BLU, BIANCO, "-", 5 );
  pulsanti[1].drawButton();

  //Draw "+" Button
  pulsanti[2].initButton(&tft,XPIU, YPIU, WCOTTURA, HCOTTURA, BIANCO, BLU, BIANCO, "+", 5 );
  pulsanti[2].drawButton();
  
  cambiaCottura(0);//Set cottura label
  Serial.println("Fine disegno form 2");
}

///Draw form with cooking status
///<param name = "tempoCottura">Cooking Time</param>
void form3_draw(int tempoCottura) {
  Serial.println("Disegno form 3");
  tft.fillScreen(NERO);//Clean screen
  
  Rettangolo_draw(2);//Draw the label with informations

  comCookingProduct("Cooking " + String(tempoCottura));// Do all the operation for the preparation
  
  /*String Barra[11] = {"", "P", "PR", "PRE", "PREL", "PRELE", "PRELEV", "PRELEVA", "PRELEVAR", "PRELEVARE", "PRELEVARE!"};
   tft.drawRect(10, 100, 220, 50, BIANCO);
   
  for(int i = 0; i< 11; i++)  {
   tft.setCursor(XPRELEVARE, YPRELEVARE);
   tft.setTextColor(BIANCO, NERO);
   tft.setTextSize(3);
   tft.print(Barra[i]);
   delay(tempoCottura/10);
  }*/

  for(int i =0; i <10; i++) {
   tft.setCursor(XPRELEVARE, YPRELEVARE);
   tft.setTextColor(BIANCO, NERO);
   tft.setTextSize(3);
   tft.print("          ");
   delay(100);
   tft.setCursor(XPRELEVARE, YPRELEVARE);
   tft.setTextColor(VERDE, NERO);
   tft.setTextSize(3);
   tft.print("PRELEVARE!");
   delay(100);
  }
  
  Serial.println("Finita preparazione");
  
  reset();
}

///Write Label for form
///<param name = "a"> Form that call the  event </param>
void Rettangolo_draw(int a) {
   String Testi[6] = {"INSERIRE", " MONETA", "SELEZIONARE", " PRODOTTO", "ATTENDERE", "EROGAZIONE"};
   int i = a*2;
   
   tft.drawRect(10, 10, 220, 50, BIANCO);
   
   tft.setCursor(65, 20);
   tft.setTextColor(BIANCO, NERO);
   tft.setTextSize(2);
   tft.print(Testi[i]);
   tft.setCursor(65, 40);
   tft.setTextColor(BIANCO, NERO);
   tft.setTextSize(2);
   tft.print(Testi[i+1]);
}

///Change the cooking time
///<param name = "pVerso"> Way to change the cooking time</param>
void cambiaCottura(int pVerso) {
  indiceCottura += pVerso;
  if (indiceCottura <=1)  {//Limit min cooking time
     indiceCottura = 1;
  }
  if (indiceCottura >=3)  {//Limit max cooking time
     indiceCottura = 3;
  }
  //Write cooking time on label
  tft.setCursor(XDISPLAY, YDISPLAY);
  tft.setTextColor(VERDE, NERO);
  tft.setTextSize(HDISPLAY);
  tft.print(indiceCottura);
  delay(100);
}

///reinitialization of the machine after a selling
void reset()  {
  indiceCottura = 2;
  delay(WAITINGTIME);
  
  Serial.println("Resettato");
  form1_draw();
}

Spero di essermi spiegato e grazie mille per l’aiuto

-Daniele

Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie. Qui una serie di link utili, non inerenti al tuo problema: - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili