Gestione Display 2.8" touch Libreria Adafruit

Ciao a tutti,
dopo aver utilizzato display grafici 128x64 con la libreria u8g volevo passare i risultati con il display 240x320 touch screen con le librerie Adafruit:

Per visualizzare il testo nessun problema.
Quando voglio visualizzare una variabile, ad esempio un valore analogico sull'unico pin, aimè libero A5, i valori letti vengono continuamente sovrascritti, c'è sicuramente un errore di codice ma non so quale.

Grazie.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library

#define LCD_CS A0 // Chip Select goes to Analog 3   > modified 0 
#define LCD_CD A1 // Command/Data goes to Analog 2  > modified 1 
#define LCD_WR A2 // LCD Write goes to Analog 1     > modified 2 
#define LCD_RD A3 // LCD Read goes to Analog 0      > modified 3

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

 
#define   BLACK   0x0000
#define   BLUE    0x001F
#define   RED     0xF800
#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);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;

void setup(void) 
{
tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation (3);
     
     tft.setCursor(0, 0);
     tft.setTextColor(WHITE);  tft.setTextSize(2);
     tft.println("Lettura val. analogico A5");
}
void loop(void) 
{
  
  tft.setTextColor(YELLOW);  tft.setTextSize(5);
  
  int  adc  = analogRead(A5);
  tft.setCursor(0, 40); 
  tft.println((int)adc); 
}

>iz2fly: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More -> Modify) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Guglielmo

Nessun errore, il programma fa quello che tu chiedi. Nella loop() stampi il valore letto su display, ma essendo la loop richiamata di continuo, leggi il pin e stampi all'infinito.
Logicamente prima di stampare la "zona" in cui stampi deve essere sempre la stessa e quindi DEVI usare
la setcursor() e posizionarti. Poi la zona la devi anche "ripulire" prima di stampare.

>iz2fly: un altra cosa ...
... nonostante tu sei da un po' sul forum ... non riesco a trovare il tuo post di presentazione ... :confused: ... pertanto, nel rispetto del regolamento, ti chiedo 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 mille :slight_smile:

Guglielmo

Grazie per le risposte e dovute precisazioni, presentazione fatta.
Per quanto riguarda il codice, tft.setCursor(0, 40); è già inserito, non ho ancora trovato il modo di cancellare. con la libreria U8G non ne ho mai avuto bisogno.

grazie Ernesto

// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
// Modified line 11-12-13-14-68 ###############################################################

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library

// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A0 // Chip Select goes to Analog 3   > modified 0 ################
#define LCD_CD A1 // Command/Data goes to Analog 2  > modified 1 ################
#define LCD_WR A2 // LCD Write goes to Analog 1     > modified 2 ################
#define LCD_RD A3 // LCD Read goes to Analog 0      > modified 3 ################

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
 
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#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);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;

void setup(void) 
{
tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation (3);
     
     tft.setCursor(0, 0);
     tft.setTextColor(WHITE);  tft.setTextSize(2);
     tft.println("Lettura val. analogico A5");
}
void loop(void) 
{
  
  tft.setTextColor(YELLOW);  tft.setTextSize(5);
  
  int  adc  = analogRead(A5);
  tft.setCursor(0, 40); 
  tft.println((int)adc);  
 }

... presta attenzione al mio post #1 relativo al tuo post iniziale :wink:

Guglielmo

Alla fine dopo molte ricerche sono riuscito a migliorare la situazione inserendo nel setup la prima, e nel loop la seconda riga del seguente codice:

tft.fillScreen(BLUE); 

tft.fillRect(0,40,120,40,BLUE);

Questo esegue l'operazione di cancellazione dell'area dove viene stampato il valore per poi essere riscritto, rimane il fatto che ad ogni ciclo, in fase di aggiornamento del valore, c'è uno sfarfallio evidente dovuto appunto alla cancellazione dell'area e alla seguente riscrittura.

Non so se questo sia normale per questo tipo di display o si possa ovviare con qualche altro accorgimento.

iz2fly ... cosa debbo fare perche tu correga, come ti ho chiesto nel post #1, ed in conformità al regolamento, quello che hai scritto nel tuo promo post ? ? ? >:( >:( >:(

Guglielmo

Va bene così? Grazie Guglielmo finalmente ci sono arrivato.

iz2fly:
Va bene così? Grazie Guglielmo finalmente ci sono arrivato.

Ok ... a posto ! :slight_smile:

Guglielmo

Nella loop() io ci metterei comunque un delay() che sò 500 o 300.
Mica ti serve leggere alla massima velocità ?!?

Si, un delay gliel'ho già messo, ma anche se il valore letto rimane lo stesso comunque ad ogni ciclo "lampeggia", sarà che sono abituato con display monocromatici tipo 128x64 con ST7920 e questo problema non mi si presenta, probabilmente perchè non c'è uno sfondo da cancellare.

Ernesto

Effetto flickering.
Per evitarlo DEVI memorizzare il vecchio valore e presentarlo a video (compresa la cancellazione!! ) SOLO se il valore è cambiato.

La cosa si fa troppo complicata per i miei gusti, pensavo fosse più semplice trasportare quello che ho già fatto utilizzando questo display, metto la foto, anche di quello che uso di solito.

E' così laborioso per tutti i display a colori o è solo per alcuni o per alcune librerie?

Dovendo poi visualizzare una grafica come in foto, se già devo tirare in ballo la memoria per un valore numerico figuriamoci per visualizzare la rotazione di una linea per 360 gradi!
Questi valori potrebbero cambiare anche 500 volte o più al giorno, per cui, se non ho capito male, la memoria si degrada in fretta.

Ernesto

Non esiste IL display. Sono display diversi tra loro, chip diversi, librerie diverse.
Non siamo su un PC con dei driver che permettono astrazione e quindi una specie di utilizzo simile attraverso ad esempio API di Windows.

salve sono un nuovo iscritto un buongiorno a tutti vorrei gentilmente avere un informazione rigurdo un display tft modello BIGTREETECH TFT24 V1.1 appena acquistato compatibile con la mia scheda MKS GEN 1.4 non riesco a farlo funzionare il touch sreen nel senzo si accende ma non comunica con la stampante funziona solo con i cavi ext1 e ext2 il terzo cavo relativo al touch malgrado sia connesso non risponde ai comandi utilizzo marlin 2.05 come posso configurarlo grazie.

Buongiorno, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

>intel130: Pur montando quella scheda (MKS GEN 14) credo un ATmega2560, non credo che sia questo il posto migliore dove ricevere risposte ... mi sembra un problema molto specifico di quella scheda e del software "marlink 2.05" per cui, probabilmente, riceverai molte più risposte se ti rivolgi ai loro forum di supporto. :wink:

Poi, naturalmente, se passa da queste parti qualcuno che sa la risposta ... ben venga :slight_smile:

Guglielmo