Consiglio programma gestione display tft 7 pollici

Un saluto a tutti :slight_smile:
dopo aver impazzito un po' per far funzionare il display in oggetto, mi trovo ora a sbattere con la programmazione di arduino.
Posseggo mega 2560 con un display tft da 7.1 come potete vedere da questo link:
http://www.ebay.it/itm/7-TFT-LCD-Module-Display-Touch-Panel-PCB-adapter-For-Arduino-GE-/321476408181?pt=Bauteile&hash=item4ad97cb375
Il tutto funziona con il software di esempio, e riesco a fare qualcosa di quello che mi necessita, ma attualmente mi viene un dubbio che per quello che voglio fare ci siano funzioni + veloci e semplici che non conosco.....
Vi avviso che anche se ho usato pic programmati in assembler, non ho mai fatto qualcosa di serio con arduino...
Vi faccio un esempio di quello che voglio fare; il più semplice è un contagiri per auto a barre, quindi mettiamo la scala debba avere circa 70 barrette da accendere o spegnere in base ai giri... Io ora disegno le barre e ok, ma se i giri si abbassano devo spegnere le barrette, in pratica solo per vedere un'accelerata da accendere tutte le barrette e tornare indietro a spegnerle, mi viene una paginata di istruzioni, disegnandole e cancellandole una per una... Quà mi viene il dubbio ci siano funzioni + pratiche. Vi preciso che il dato dei giri viene preso da una variabile. Qualcuno può consigliarmi qualcosa? E magari anche dove poter reperire le istruzioni per arduino?
Scusate per il lungo post :stuck_out_tongue:
Grazie a tutti e buona serata :smiley:

Non esistono funzioni "veloci"per fare quello che chiedi.
Io mi sono trovato a dover realizzare qualcosa di simile a quello che chiedi tu (vedi la mia firma) e per disegnare il contagiri come dici tu ho dovuto usare semplicemente le istruzioni per accendere o spegnere un pixel e tanta tanta trigonometria.
Inoltre non serve scrivere paginate di codice, anzi posso dirti che nel mio progetto la funzione che disegna i giri partendo da un valore numerico non supera le 40 righe.
In conlcusione vai tranquillo che le funzioni che già utilizzi sono più che sufficienti per fare quello che chiedi! :slight_smile:

Ciao :wink:
Grazie per la risposta, ho visto quello che hai realizzato, ed è quello che devo fare anche io, però un po' + complesso e con molti + dati... il contagiri però verrebbe proprio come il tuo :stuck_out_tongue:
Io per disegnare i rettangolini ho trovato una funzione sulla libreria del display, che disegna il rettangolo dandogli le "misure" dei pixel e quindi la posizione; però se si hanno per esempio 70 barrette, sono 70 istruzioni per accenderle tutte, e altrettante per spegnerle, come fai a dirmi 40 righe? E' li che forse sbaglio...
Grazie ancora
Denis

Sbagli approccio. Mai sentito parlare di cicli? :wink:
Per curiosità, cosa vorresti realizzare esattamente?

(A)
Ti basta creare un array monodimensionale con k elementi, ogni elemento è la coordinata x della barretta i-esima. La y sarà sempre la stessa, le dimensioni sempre le stesse se stai realizzando un sistema di barrette tutte identiche a scorrimento orizzontale.

(B)
Creati una funzione che disegna la barretta alle coordinate x,y con colore z.
Per disegnarla z = quello che ti serve, per cancellarla z = quello dello sfondo.

(C)
Un'altra funzione calcola qual è l'ultima barretta n accesa partendo dal numero di giri.

(D)
A questo punto, con una terza funzione gli fai disegnare le prime n barrette accese e le rimanenti k-n spente richiamando la prima funzione le prime n volte con z = colore, le successive con z = sfondo ed ovviamente prendendo la i-esima coordinata x.

(Giocando con il punto A...)
Se metti le coordinate x separate della larghezza di una barretta, avrai un barra continua. Se invece lasci uno spazio supplementare, avrai un effetto a barrette parallele.
Puoi anche fare in modo che a basso numero di giri si comporti come una barra continua e poi metti una spaziatura crescente ad alto numero di giri.

(Giocando con il punto C)
Puoi creare una scala lineare o logaritmica o come ti pare.

(Giocando con il punto D...)
Potresti anche far variare il colore, facendolo verde all'inizio, poi giallo ed alla fine rosso... su tutta la barra oppure diverso da zona a zona...

Devo realizzare un cruscotto per un'auto da corsa, quindi molto simile a quello che hai fatto tu...
Cicli va bene, ma come ripeto, con arduino sono nuovo e inesperto, e senza esempi, non so proprio come fare...

paulus1969:
(A)
Ti basta creare un array monodimensionale con k elementi, ogni elemento è la coordinata x della barretta i-esima. La y sarà sempre la stessa, le dimensioni sempre le stesse se stai realizzando un sistema di barrette tutte identiche a scorrimento orizzontale.

(B)
Creati una funzione che disegna la barretta alle coordinate x,y con colore z.
Per disegnarla z = quello che ti serve, per cancellarla z = quello dello sfondo.

(C)
Un'altra funzione calcola qual è l'ultima barretta n accesa partendo dal numero di giri.

(D)
A questo punto, con una terza funzione gli fai disegnare le prime n barrette accese e le rimanenti k-n spente richiamando la prima funzione le prime n volte con z = colore, le successive con z = sfondo ed ovviamente prendendo la i-esima coordinata x.

(Giocando con il punto A...)
Se metti le coordinate x separate della larghezza di una barretta, avrai un barra continua. Se invece lasci uno spazio supplementare, avrai un effetto a barrette parallele.
Puoi anche fare in modo che a basso numero di giri si comporti come una barra continua e poi metti una spaziatura crescente ad alto numero di giri.

(Giocando con il punto C)
Puoi creare una scala lineare o logaritmica o come ti pare.

(Giocando con il punto D...)
Potresti anche far variare il colore, facendolo verde all'inizio, poi giallo ed alla fine rosso... su tutta la barra oppure diverso da zona a zona...

Credo di aver capito cosa dici di fare, ma perdonatemi, non so farlo con arduino, penso di aver capito, leggendo in giro, come fare una tabella (array), ma non saprei come utilizzarla e richiamarla; se qualcuno avesse un piccolo esempio, poi lo espando da solo...
Grazie

Questa è la parte più semplice.
Guarda:
http://arduino.cc/en/Reference/Array

con

int x[]={10, 30, 50, 70, 90};

lo crei, qui è per 5 barrette

i valori li tiri fuori con

int xpos = x[i]

con i da 0 a 4
per cui x[0] è 10, x[3] è 70... insomma così.

paulus1969:
Questa è la parte più semplice.
Guarda:
http://arduino.cc/en/Reference/Array

con

int x[]={10, 30, 50, 70, 90};

lo crei, qui è per 5 barrette

i valori li tiri fuori con

int xpos = x[i]

con i da 0 a 4
per cui x[0] è 10, x[3] è 70... insomma così.

Grazie, vedrò di fare delle prove, intanto ho capito come fare una tabella :wink:

paulus1969:
Questa è la parte più semplice.
Guarda:
http://arduino.cc/en/Reference/Array

con

int x[]={10, 30, 50, 70, 90};

lo crei, qui è per 5 barrette

i valori li tiri fuori con

int xpos = x[i]

con i da 0 a 4
per cui x[0] è 10, x[3] è 70... insomma così.

Ciao :slight_smile:
sono riuscito a fare quello che mi hai scritto, ma non è stato facile, intanto, da dove hai tirato fuori "xpos"? Vabbè, passo oltre, ho disegnato una barra di diversi colori, così, potresti intanto dirmi se va bene fare la funzione ripetuta per ogni colore?

// Crea dei rettangoli per il contagiri
myGLCD.setColor(255, 255, 255); //colore dei rettangoli bianchi
for (int i=0; i<17; i=i+1)
{
int xpos = x*; //defnisce lo spostamento orizzontale*

  • y=10; //posizione partenza da vert*
  • x2=xpos+2; //larghezza dei rettangoli*
  • y2=y+25; //altezza dei rettangoli*
  • myGLCD.fillRect(xpos, y, x2, y2);*
  • }*
  • myGLCD.setColor(0, 255, 0); //colore dei rettangoli verde*
  • for (int i=17; i<55; i=i+1)*
  • {*
    _ int xpos = x*; //defnisce lo spostamento orizzontale*_
    * y=10; //posizione partenza da vert*
    * x2=xpos+2; //larghezza dei rettangoli*
    * y2=y+25; //altezza dei rettangoli*
    * myGLCD.fillRect(xpos, y, x2, y2);*
    * }*
    * myGLCD.setColor(255, 0, 0); //colore dei rettangoli rosso*
    * for (int i=55; i<80; i=i+1)*
    * {*
    _ int xpos = x*; //defnisce lo spostamento orizzontale*
    * y=10; //posizione partenza da vert*
    * x2=xpos+3; //larghezza dei rettangoli*
    * y2=y+25; //altezza dei rettangoli*
    * myGLCD.fillRect(xpos, y, x2, y2);
    }*
    Se poi volessi anche fare uno spostamento in verticale della barra? Creo un'altra tabella di nome y, ma poi per richiamarla? Credo vada integrata insieme a questa "for (int i=0; i<17; i=i+1)" ma come?
    Altra cosa, sempre se non chiedo troppo, ma "i" è un carattere fisso? O lo decido io? Voglio dire, "i" si riferisce solo a "x" e quindi se faccio variabile anche "y" dovrò usare un'altro carattere? Perdonami se ho detto cavolate... Dove si possono trovare spiegazioni per queste funzioni?
    Infinito grazie :slight_smile:_