Orientamento coordinate X,Y display TFT

Salve,
ho problemi con il mio display tft 2.8 touchscreen, per default il display ha orientamento orizzontale cioè le coordinate sono la x si riferisce al lato lungo e la y lato corto ("rettangolo in posizione orizzontale").
Nel mio progetto sto usando il display in posizione verticale quindi il lato corto è la "base" del display e la parte lunga l'altezza. Il problema è che comunque il display mantiene la x sulla parte più lunga e per me dovrebbe assumere quindi la y. Questo mi comporta un problema rilevante sul mappare gli oggetti per il touchscreen!
Ho provato con le funzioni di orientamento: tft.setRotation() ma non è servito a nulla, il display mantiene sempre x,y di default!
Potete aiutarmi a capire?
Grazie in anticipo
Maurizio Filomeni

Non ho voglia di tirare fuori la sfera di cristallo.

Quale Display e quale biblioteca?
Modello e link.
Ciao Uwe

Credo non ci voglia la sfera di cristallo… é un concetto che credo ogni display tft “sfrutti” per l’orientamento.
Comunque se non ti sei infastidito della mia risposta, ti indico le librerie che utilizzo:

#include <Elegoo_GFX.h>    // Core graphics library
#include <Elegoo_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>

il display è un tft TouchScreen 2.8 Elegoo
Grazie in anticipo.
Maurizio Filomeni

girare di 90 gradi lo schermo, cioè il tocco non è così immediato :slight_smile:

per lo schermo è semplice, c’è o ci dovrebbe essere la funzione tft.setRotation(orientamento);
con:
orientamento = 0 verticale standard
orientamento = 1 orizzontale (portrait
orientamento = 3 verticale sottosopra
orientamento = 4 portrait sottosopra

per il tocco devi rimappare le coordinate x e y in funzione dell’orientamento ad esempio

io ho questi valori di calibrazione (sono le coordinate dei 2 spigoli opposti)

uint16_t TS_LEFT = 935; // valori dati dalla calibrazione
uint16_t TS_RT  = 100;  // 
uint16_t TS_TOP = 158;  // 
uint16_t TS_BOT = 916;  //

e questo è il codice che mi scambia i valori in funzione dell’orientamento

  switch (Orientation) {      // sistemo i valori in funzione dell'aspetto
     case 0:   break;        // nessun cambiamento,  calibrato per PORTRAIT (verticale)
     case 1:   tmp = TS_LEFT, TS_LEFT = TS_BOT, TS_BOT = TS_RT, TS_RT = TS_TOP, TS_TOP = tmp;  break;
     case 2:   SWAP(TS_LEFT, TS_RT);  SWAP(TS_TOP, TS_BOT); break;
     case 3:   tmp = TS_LEFT, TS_LEFT = TS_TOP, TS_TOP = TS_RT, TS_RT = TS_BOT, TS_BOT = tmp;  break;

poi ad ogni pressione calcolo il punto toccato per x e y

      if (tp.z > MINPRESSURE && tp.z < MAXPRESSURE) {
         // i valori trovati in modo orizzontale vanno mappati per definire esattamente il punto toccato
         x = map(tp.y, TS_BOT, tft.height()-TS_TOP, 0, tft.width());
         y = map(tp.x, TS_RT, tft.width()-TS_LEFT, 0, tft.height());