Now it works for me. The only flaw is that the pushbuttons do not have debounces.
I leave the function in case someone wants to see it.
void Menu_Principal()
{
// Contador de teclas y navegador.
int opcion = 0;
bool salir = false;
const int seleccionMenu = 8;
// Limpiar pantalla.
lcd.clear();
do
{
//******************************************************************
// Dibujo el menú principal.
String MENSAJES[] =
{
"** MENU PRINCIPAL **", // Posición 0.
" ESTADO PRINCIPAL ", // 1
" NOMBRE RELES ", // 2
" NOMBRE SENSORES ", // 3
" ENTRADA ANALÓGICA ", // 4
" CONFIGURACION ", // 5
" ACERCA DE... ", // 6
" AYUDA ", // 7
" EXTRA ", // 8
" INICIO ", // 9
" ", // 10
">" // 11
};
switch (opcion)
{
case 0:
lcd.setCursor(0, 0); // Línea 1 del LCD.
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[1]); // > ESTADO PRINCIPAL
lcd.setCursor(0, 1);
lcd.print(MENSAJES[11]); // >
lcd.setCursor(0, 2);
lcd.print(MENSAJES[2]); // NOMBRE RELÉS
lcd.setCursor(0, 3);
lcd.print(MENSAJES[3]); // NOMBRE SENSORES
break;
case 1:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[1]); // ESTADO PRINCIPAL
lcd.setCursor(0, 2);
lcd.print(MENSAJES[2]); // > NOMBRE RELÉS
lcd.setCursor(0, 2);
lcd.print(MENSAJES[11]); // >
lcd.setCursor(0, 3);
lcd.print(MENSAJES[3]); // NOMBRE SENSORES
break;
case 2:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[1]); // ESTADO PRINCIPAL
lcd.setCursor(0, 2);
lcd.print(MENSAJES[2]); // NOMBRE RELÉS
lcd.setCursor(0, 3);
lcd.print(MENSAJES[3]); // > NOMBRE SENSORES
lcd.setCursor(0, 3);
lcd.print(MENSAJES[11]); // >
break;
case 3:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[4]); // > ENTRADA ANALÓGICA
lcd.setCursor(0, 1);
lcd.print(MENSAJES[11]); // >
lcd.setCursor(0, 2);
lcd.print(MENSAJES[5]); // CONFIGURACIÓN
lcd.setCursor(0, 3);
lcd.print(MENSAJES[6]); // ACERCA DE...
break;
case 4:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[4]); // ENTRADA ANALÓGICA
lcd.setCursor(0, 2);
lcd.print(MENSAJES[5]); // > CONFIGURACIÓN
lcd.setCursor(0, 2);
lcd.print(MENSAJES[11]); // >
lcd.setCursor(0, 3);
lcd.print(MENSAJES[6]); // ACERCA DE...
break;
case 5:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[4]); // ENTRADA ANALÓGICA
lcd.setCursor(0, 2);
lcd.print(MENSAJES[5]); // CONFIGURACIÓN
lcd.setCursor(0, 3);
lcd.print(MENSAJES[6]); // > ACERCA DE...
lcd.setCursor(0, 3);
lcd.print(MENSAJES[11]); // >
break;
case 6:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[7]); // > AYUDA
lcd.setCursor(0, 1);
lcd.print(MENSAJES[11]); // >
lcd.setCursor(0, 2);
lcd.print(MENSAJES[8]); // EXTRA
lcd.setCursor(0, 3);
lcd.print(MENSAJES[9]); // INICIO
break;
case 7:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[7]); // AYUDA
lcd.setCursor(0, 2);
lcd.print(MENSAJES[8]); // > EXTRA
lcd.setCursor(0, 2);
lcd.print(MENSAJES[11]); // >
lcd.setCursor(0, 3);
lcd.print(MENSAJES[9]); // INICIO
break;
case 8:
lcd.setCursor(0, 0);
lcd.print(MENSAJES[0]); // ** MENÚ PRINCIPAL **
lcd.setCursor(0, 1);
lcd.print(MENSAJES[7]); // AYUDA
lcd.setCursor(0, 2);
lcd.print(MENSAJES[8]); // EXTRA
lcd.setCursor(0, 3);
lcd.print(MENSAJES[9]); // > INICIO
lcd.setCursor(0, 3);
lcd.print(MENSAJES[11]); // >
break;
default:
Serial.print(F("Fuera de rango"));
break;
}
// Fin de pintar el menú principal.
//******************************************************************
// Leer pulsador ingresada por el usuario.
// Validar el tipo de pulsador.
if (digitalRead(A5) == HIGH)
{
switch (opcion)
{
case 0:
//
break;
case 1:
//
break;
case 2:
//OpcionC();
break;
case 3:
//
break;
case 4:
//
break;
case 5:
//
break;
case 6:
//
break;
case 7:
//
break;
case 8:
salir = true;
break;
default:
lcd.print(F("Fuera de rango. "));
break;
}
}
// Entonces si pulsas pulsador Abajo.
//tecla = digitalRead(A2);
else if (digitalRead(A2) == HIGH)
{
opcion++;
}
// Entonces si pulsas pulsador Arriba.
//tecla = digitalRead(A1);
else if (digitalRead(A1) == HIGH)
{
opcion--;
}
// Si está en la última opción, salta a la primera.
if (opcion > seleccionMenu)
{
opcion = 0;
}
// Si está en la primera posición, salta a la última.
if (opcion < 0)
{
opcion = seleccionMenu;
}
// Uso la tecla escape como salida.
} while (salir == false);
}