Menù cambio colore su display TFT

Ciao, è un po' che ci penso, ma non ci arrivo... Vorrei fare in una pagina del display la possibilità di scegliere il colore delle scritte per tutto il programma, la funzione che imposta il colore prima di una scritta è questa:

myGLCD.setColor (VGA_RED);

come faccio per cambiare "VGA_RED" in base a quello che ho scelto?

A me viene solo in mente di creare degli if con dei boolean ( i boolean vengono impostati nella pagina della scelta colore), e a seconda di quale è attivo, scrivere la stringa, ma mi sembra venga enorme per ogni scritta che devo fare, esempio:

if (rosso == true)
 {
  myGLCD.setColor (VGA_RED);
 }

if (verde == true)
 {
  myGLCD.setColor (VGA_GREEN);
 }
....
....
....

e a seguire per tutti i colori, che sono 17, non è troppo? Ci sono scorciatoie? Grazie

provare con un array da 17 elementi? poi con myGLCD.setColor (colore[i]); imposti il colore.

rimane da capire se VGA_RED è un byte, int o cos'altro...

Non saprei, perchè la stringa si sostituisce con questa:

myGLCD.setColor (255, 0, 0); sempre riferito al colore rosso

in pratica sono 3 byte che corrispondono al valore di R G B... Quindi per fare con un array come dici tu, andrebbe fatto con 3 array corrispondenti a RGB? Non viene comunque macchinoso? In questo modo sono 3 i byte da inviare per ogni colore, si peggiora per la quantità di dati da gestire, credo...

non uso quel display, ma secondo me se provi così:

byte colori[17] = { VGA_RED, VGA_GREEN, VGA_... };

...

myGLCD.setColor (colori[i]);

dovrebbe funzionare. rimane da capire se va bene un array di byte o se serve qualcos'altro... e ovviamente devi prevedere la scelta del colore con un numero intero tra 0 e 16...

ps: mi sono accorto rileggendo il post di prima che non avevo usato i tag code per il codice e non si leggeva correttamente...

Ho capito cosa vuoi dire, ma allora meglio usare un array di char, per essere riconosciuto dalla libreria del display… Devo provare a vedere che accade…

credo che VGA_RED e simili siano costanti definite dalla libreria. vedi come le hanno definite e poi ti regoli per l'array.

Eccomi,
nella libreria sono definite così:

// VGA color palette
#define VGA_BLACK		0x0000
#define VGA_WHITE		0xFFFF
#define VGA_RED			0xF800
#define VGA_GREEN		0x0400
#define VGA_BLUE		0x001F
#define VGA_SILVER		0xC618
#define VGA_GRAY		0x8410
#define VGA_MAROON		0x8000
#define VGA_YELLOW		0xFFE0
#define VGA_OLIVE		0x8400
#define VGA_LIME		0x07E0
#define VGA_AQUA		0x07FF
#define VGA_TEAL		0x0410
#define VGA_NAVY		0x0010
#define VGA_FUCHSIA		0xF81F
#define VGA_PURPLE		0x8010
#define VGA_TRANSPARENT	0xFFFFFFFF

che mi pare tutt’altra cosa di definirle con 3 byte per rispettivi RGB
Ci studio un po’

a parte il trasparente, gli altri colori sono degli unsigned int (0 .. 65536)...

E' si, quindi potrei fare l'array int, direttamente numerico, e provare che accade. Però nella pagina che scelgo il colore, cosa faccio, assegno un numero (indice dell'array) a una variabile? E stessa cosa dove mi serve dare quel colore, interrogo la variabile e vedo che numero ha? Mi sfugge qualcosa... Tanto vale che assegno il numero del colore a una variabile int, che poi uso nell'istruzione...

parlando sul teorico, perché non so cosa hai già fatto, però si potrebbe risolvere con 2 array...

unsigned int codcolore[16] = { VGA_BLACK, VGA_WHITE, VGA_RED, VGA_GREEN, VGA_BLUE, VGA_SILVER, VGA_GRAY, VGA_MAROON, VGA_YELLOW, VGA_OLIVE, VGA_LIME, VGA_AQUA, VGA_TEAL, VGA_NAVY, VGA_FUCHSIA, VGA_PURPLE, VGA_TRANSPARENT };

char strcolore[16][10] = { "Nero", "Bianco", "Rosso", ecc... };

quando chiedi il colore visualizzi l'array strcolore e ti salvi l'indice. per impostare il colore invece usi lo stesso indice con l'altro array...

senza provarlo... forse funziona...

Mi sembra troppo macchinoso, stavo provando questo sistema: dichiaro delle variabili, tante quanti tipi di cose che voglio modificare

unsigned int COL_SCRITTE;     // colore scritta
unsigned int SFONDO_STR;     // colore sfondo
.....
....

Quando devo dare l'istruzione per quel carattere o sfondo faccio così:

myGLCD.setColor (COL_SCRITTE);     // imposto colore scritte

e quando devo assegnare un colore per un certo carattere:

COL_SCRITTE = VGA_RED;               // assegno alle scritte il rosso

Il sistema funziona, ma manca una cosa, questa assegnazione deve rimanere anche spegnendo arduino, è possibile salvare questa assegnazione nella memoria? Non l'ho mai utilizzata e non saprei come fare...

puoi usare la eeprom oppure una sd... dipende da cosa ti serve di preciso. con la eeprom non devi aggiungere niente di nuovo a livello hardware, però c'è un limite di scritture per singola cella, circa 100.000 scritture, che possono essere tante o poche a seconda di come le usi... qui tutto quello che serve sapere... https://www.arduino.cc/en/Reference/EEPROM

Ciao, pensavo di usare la eeprom, se non ricordo male il limite è solo in scrittura, quidi non penso di cambiare impostazione spesso, al max una volta al mese, sarebbero circa 10.000 anni :-X ahahhahahhahahh ;D La lettura invece avverrebbe ogni accensione di arduino. Mi guardo un po' il reference, vedo cosa riesco a fare :wink: Un karma per l'aiuto è ben donato Ciao

grazie, troppo buono.
comunque confermo che in lettura non hai limiti.