Allora purtroppo come immaginavo, quello che ho fatto messo nel programma vero e proprio mi crea problemi. Posto tutto lo sketch di prova che funziona.
#define ITA 0
#define ING 1
#define TED 2
#define MENU_STRUMENTI 0
#define MENU_INTERVAL 1
#define MENU_SUONO 2
#define LCD_COLONNE 16
//RIGA COL
char* multiliguaArray [3][3] = {
"STRUMENTI", "Interval.", "Suono"};
char StringWithSpaces[14];
void setup()
{
Serial.begin(9600);
}
void loop()
{
for(int x=0; x <= 2; x++)
{
Serial.print("NEL LOOP: ");
Serial.println( printMenuItem(0,x) );
delay(500);
}
delay(10000);
}
char *printMenuItem(byte id_lingua, byte id_stringa)
{
char *stringa = multiliguaArray[id_lingua][id_stringa];
int lenght = strlen(stringa);
if(lenght >= 14)
{
return stringa;
}
byte spaces = (((LCD_COLONNE - 2) - lenght) / 2);
char spazio = 's';
for(int x=0; x<spaces; x++)
{
StringWithSpaces[x] = spazio;
}
StringWithSpaces[spaces] = '\0';
strcat(StringWithSpaces,stringa);
return StringWithSpaces;
}
Sto usando la libreria menubeckend per creare un menu, la mia intenzione è di creare un menu con un paio di lingue.
Menubeckend ti da la possibilità di creare dei menuItem e assegnargli un nome, esempio in questo modo:
MenuItem photo_tool = MenuItem(" menu1 ");
MenuItem intervalometer = MenuItem(" menu2 ");//sottomenu...
Quello che voglio fare io con la mia funzione è, dopo essermi creato l'array di ad esempio 3 righe, (per l'ita, ing, e ted) e tot colonne per quello che voglio rappresentare (menu1, menu2, ecc..)
Creare gli spazi per posizionare meglio nell'lcd (al centro).
Ora, con il programma postato ora, tutto sembra funzionare.
-Chiamando un sola volta la funzione per creare il menuItem, sembra funzionare, in questo modo:
MenuItem photo_tool = MenuItem(printMenuItem(ITA,MENU_STRUMENTI));
-Chiamando una seconda volta la stessa funzione per fare lo stesso servizi, non va.
Ho provato a controllare la ram libera nel programma completo, siamo a circa 400 byte liberi.
Penso ci sia qualche macello a livello di puntatori e l'array di char, questo lo dico perchè ho provato ha creare un nuovo array (identico con nome diverso) un'altra funzione (identica con nome diversa), e nella creazione dei due elementi del menu ho chiamato per un menu una funzione e per l'altro menu l'altra funzione, in questo modo non si blocca..
Qualche consiglio?
Grazie