#19 Arduino: TFT con lettore SD

Parte 4 di 5 configuriamo il touch

In questa lezione, dopo la aver configurato la parte grafica, passiamo al setup del touch.

La lezione è divisa in due parti, una di configurazione e calibrazione molto breve, ed una seconda dedicata alla compilazione un semplice sketch.

Materiale Necessario

Se siete interessati al materiale, cliccate su questo e sarete indirizzati alla pagina Amazon

Come per la parte grafica anche per il touch la cosa non è immediata, inoltre occorre ottenere dal display dei dati, che serviranno per la calibrazione, questo lo si fa tramite un esempio presente nella libreria MCUFRIEND.

Carico lo sketch in Arduino (TouchScreen_Calibr_native.ino), seguo i comandi sul display ed a fine calibrazione ho i dati che ci serviranno per lo sketch.

Le righe che mi interessano sono:

const int XP=8,XM=A2,YP=A3,YM=9; //240×320 ID=0x9341

const int TS_LEFT=187,TS_RT=976,TS_TOP=227,TS_BOT=913;

La prima riga: const int XP=8,XM=A2,YP=A3,YM=9; //240×320 ID=0x9341
indica che il touch del display è collegata ai pin analogici A2 ed A3 di Arduino.
Mentre nella seconda: const int TS_LEFT=187,TS_RT=976,TS_TOP=227,TS_BOT=913;
Indica i valori minimi e massimi dell’asse X ed Y.

La parte di Setup è terminata e posso passare alla compilazione dello sketch, come prima cosa installo la libreria Adrafruit touchscreen, che verrà inserita nello sketch con il nome TouchScreen.h.

Analizziamo il codice:

Salto la parte dove inserisco le librerie e passo a quella successiva.
Inserisco una variabile di tipo char, che serve a dare il nome al display, una cosa un pò strana ma richiesta dalla libreria.

Copio ed incollo le due righe precedenti ed infine “creo” il touch inserendo un oggetto di nome touchScreen che è formato dai pin dati da una delle righe.

Creo un secondo oggetto per salvare i punti premuti sul display, come ultima cosa inserisco i valori di pressione massima e minima che posso essere letti dal touch ed inserisco dei colori.

Nel setup, come per la parte grafica chiedo l’ID al display e lo salvo nella variabile “id”.
Imposto il monitor in verticale (setRotation(0)), e lo sfondo nero.

Passo al void, leggo lo stato del touch, successivamente visto che i pin del display e del touch sono condivisi, dopo aver letto il pin dal touch, indico gli stessi (YP e XM) come uscite e in modalità HIGH, così da permettere al display di poterli usare.

Senza questo passaggio, non avendo permesso ad Arduino di inviare la parte grafica al display, ci sarebbe solo una lettura della pressione e niente altro, senza quindi un ritorno grafico nel display.

Il touch del display è di tipo resistivo, questo volendo fare un esempio pratico, è come se ai due pin di Arduino ci fossero dei potenziometri, che mandano ad Arduino, se non usati, dei valori massimi e dei valori variabili se usati.

All’interno di if, inserisco una variabile tp.z questo è il valore di pressione sul touch, se questo è compreso tra il valore minimo e massimo impostati ad inizio sketch, Arduino procede con i comandi contenuti dentro l’if.

I comandi dentro l’if non sono altro che la mappatura del punto premuto, alla pressione del touch Arduino non legge le coordinate sullo schermo, ma legge due valori (uno per x ed uno per Y), che vanno da 0 a 1024, che vanno poi convertiti in coordinate in formato pixel.

La coordinata per l’asse X è data dal valore tp.x, compreso tra i valori dichiarati ad inizio sketches (TS_LEFT e TS_RT), convertito in un valore pixel compreso tra 0 e tft.width() (la larghezza dello schermo).
Stessa cosa avviene per l’asse Y usando però i valori TS_TOP e TS_BOT, e convertito in un valore compreso tra 0 e tft.height (l’altezza dello schermo).

L’ultima riga del loop da la forma del segno che lascio sul touch alla pressione, in questo caso è di forma circolare con centro del segno dato dai valori px e py, il segno avrà raggio 5px e sarà di colore bianco.

Riporto i link delle altre lezioni collegate a questo tipo di display:

/ 5
Grazie per aver votato!

Allegati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *