Ok... vamos dividir para conquistar.
Primeiro esquece a parte das gotas. Sabemos que temos 4 variáveis para ajustar. Não percebi o que queres dizer por menu de entrada. Se vires um LCD de 16 caracteres, não consegues meter lá muita informação.
Aqui fica um excerto da mecânica.
Infelizmente não é muito complexo e certamente que tem bugs, mas mostra como se faz, basicamente vais andando para cima e para baixo consoante as teclas que usaste.
Vais usar um LCD shield? Uma coisa boa do LCD shield é que usa o analogRead() para detectar o botão usado e isso faz com que não tenhas problemas de bounce.
#define NUMERO_MENUS 3
#define MENU_HOME 0
#define MENU_GOTA1 1
#define MENU_GOTA2 2unsigned char menu_move = 0;
unsigned char menu_enter = 0;
unsigned char menu_exit = 0;unsigned char estado_menu = 0;
unsigned char sub_menu = 0;
unsigned int temp = 0;
unsigned int parametro1 = 0;
unsigned int parametro2 = 0;unsigned int parametros[3]; //estes ser~o os parametros que usas no teu programa das gotas
switch(estado_menu) {
case MENU_HOME: {
lcd.print("Gota 1");
lcd.print("Gota 2");
if (menu_move == TRUE) {
temp = (temp+1)%3;
}
lcd.print("menu");
lcd.print(temp);
if (menu_enter == TRUE) {
estado_menu = temp;
}
break;
case MENU_GOTA1: { //agora ficamos aqui dentro...
switch(sub_menu) {
case 0: {
lcd.print("move cursor para escolher parametro");
if (menu_move == TRUE) {
temp = (temp+1)%3;
}
lcd.print("menu");
lcd.print(temp);
if (menu_enter == TRUE) {
sub_menu = temp;
}
break;
}
case 1: {
lcd.clear();
lcd.print("ajuste parametro 1");
if (menu_move == TRUE)
parametro1++;
lcd.setCursor(0,1);
lcd.print(parametro1);
if (menu_enter == TRUE) {
parametros[0] = parametro1;
}
if (menu_exit == TRUE) {
sub_menu = 0;
}
break;
}
case 2: {
lcd.clear();
lcd.print("ajuste parametro 1");
if (menu_move == TRUE)
parametro2++;
lcd.setCursor(0,1);
lcd.print(parametro2);
if (menu_enter == TRUE) {
parametros[1] = parametro2;
}
if (menu_exit == TRUE) {
sub_menu = 0;
}
break;
}//end case 2}//end switch sub_menu
}//end switch
Como podes ver é um pouco complicado, mesmo para um menu simples como este.
Com um interface série seria um pouco mais simples de programar, mas terias de ter o computador ao teu lado para configurar o bicho.
Infelizmente não tenho um lcd para fazer um programa completamente funcional e testado para veres.