My complier is Dutch
No, it isn't. The compiler "speaks" C, C++, Jave, C#, etc. The messages that come from a human language file. THAT file is what is Dutch, for you.
void Alert01()
{
lcd.setCursor (0,0); lcd.print(" opening ");
lcd.setCursor (0,1); lcd.print(" settings... ");
delay(1500);
}
// ### ALERT 2
void Alert02()
{
lcd.setCursor (0,0); lcd.print(" leaving ");
lcd.setCursor (0,1); lcd.print(" settings... ");
delay(1500);
}
// ### ALERT 3
void Alert03()
{
lcd.setCursor (0,0); lcd.print(" ready to start ");
lcd.setCursor (0,1); lcd.print("Funcie nog maken");
delay(1500);
}
ONE function with two arguments would result in a lot less code.
case STATUSA:
lcd.setCursor (0,0); lcd.print(" 1 ");
lcd.setCursor (0,1); lcd.print(" ... een dus ");
break;
case STATUSB:
lcd.setCursor (0,0); lcd.print(" 2 ");
lcd.setCursor (0,1); lcd.print(" ...twee dus ");
break;
case STATUSC:
lcd.setCursor (0,0); lcd.print(" 3 ");
lcd.setCursor (0,1); lcd.print(" ...drie dus ");
break;
case STATUSD:
lcd.setCursor (0,0); lcd.print("PRESS BUTTON TO ");
lcd.setCursor (0,1); lcd.print("OPEN SETTINGS ");
break;
That SAME code gets repeated here. Call that ONE function, instead.
String menu[] = {"4", "1__Rotation", "056Active", "3__Watches", "4__Item4", // Layer 0
"3", "100Rotations", "105Direction", "109Speed", // Layer 1
"3", "256Active", "2__Item2.2", "2__Item2.3", // Layer 2
"4", "4__Watch 1", "3__Watch 2", "3__Watch 3", "3__Watch 4", // Layer 3
"2", "4__Item3.1.1", "4__Item3.1.2"
}; // Layer 4
It's useless to piss away resources wrapping strings in String objects, when the wrapped string will never change. Keep the strings in PROGMEM to save even more SRAM.