menniti:
Allora riprendo la problematica dell'array perché non capisco come impostarlo e comunque vorrei una soluzione ottimale.
Io al tuo posto procederei inizializzando tre array multidimensionali, ovviamente posti nella flash, in questo modo:
char Stringa[20] [20] = { {"ATmega328p"},
{"ATMEGA644"},
{"ATMEGA2560"}
};
byte signature [20] [3] = { {0x1E,0x1C,0x1D},
{0x1E,0x1C,0x1E},
{0x1E,0x1C,0x1F}
};
byte fuses [20] [4] = { {0xff,0xff,0xff,0xff},
{0xff,0xff,0xff,oxff},
{0xff,0xff,0xff,oxff}
};
Premesso che i valori numerici li ho messi a caso, poi tocca mettere quelli corretti, abbiamo tre array composti da 20 righe di tot colonne, il numero della riga è l'indice univoco (quante righe dipendono dal numero di micro che vuoi inserire), ricavato dalla signature, che ti permette di trovare tutti gli altri parametri.
In pratica hai un array di stringhe che contiene la descrizione del micro, 20 caratteri dovrebbero bastare e sono pari ad una singola riga del display così hai meno problemi di formattazione dei messaggi, poi hai due array di valori unsigned int che contengono le signature, 3 colonne per tot righe, e la stessa cosa per i valori dei fuse posti in un terzo array composto da 4 colonne e tot righe.
Non appena hai trovato i tre byte della signature non devi fare altro che scorrere il relativo array per righe leggendo i tre byte delle colonne, confronti i valori e se corrispondono hai trovato l'indice per accedere agli altri due array per avere la descrizione e i fuse.
Lo so che detto a parole sembra complicato, ma in realtà è semplicissimo da implementare, se hai problemi questa parte di codice te la scrivo io.