Go Down

Topic: Orientamento coordinate X,Y display TFT (Read 155 times) previous topic - next topic

filomeni

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

uwefed

Non ho voglia di tirare fuori la sfera di cristallo.

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

filomeni

#2
Oct 15, 2018, 03:12 pm Last Edit: Oct 15, 2018, 03:14 pm by filomeni
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:
Code: [Select]
#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

Patrick_M

#3
Oct 15, 2018, 04:21 pm Last Edit: Oct 15, 2018, 04:22 pm by Patrick_M
girare di 90 gradi lo schermo, cioè il tocco non è così immediato :)

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)
Code: [Select]

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
Code: [Select]

  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
Code: [Select]

      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());


per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Go Up