CAP3 - (Software Parte 2, Menus con boton y potenciometro)

jmcadsl

Miembro Honorífico
17 Ene 2010
851
España
Provincia
Madrid
Bien, una vez tengamos el boton y el potenciometro funcionando vamos a crear un programa que los utilice para poder movernos por el menu que necesitemos en nuestro controlador.

El código de ejemplo que expongo es muy muy sencillo, se trata de un simple menú de 2 submenus, luego cada uno debe ir ampliandolo de tal forma que cumpla con sus requisitos.

Mi consejo es que primero anoteis en un papel la opciones que creeis importantes en vuestro controlador.
Por favor no copiar y pegar, ir leyendo linea a linea el código hasta que lo entendais , de esta manera os será más facil crear vuestro menu.
Este es el que yo uso:
* ESQUEMA MENUS

-CONFIGURACION MODULOS ACTIVOS
* - MODULO PH
* - MODULO RELLENO
* - MODULO TEMPERATURA AGUA
* - MODULO TEMPERATURA LEDs
* - MODULO LUCES
* - MODULO OLEAJE
* - MODULO HUMEDAD
* - MODULO PERISTALTICAS
* - MODULO ENCHUFES
* - MODULO ENCHUFES2
* - MODULO WIFI
* - VOLVER

-CONFIGURACION RELOJ
-ACCESOS DIRECTOS
* - MANTENIMIENTO
* - ENCHUFES MANUAL
* - CALIBRACION PH
* - MODO TORMENTA
* - TEST LUCES
* - RESUMEN LUCES
* - LCD NOCTURNO
* - ACTIVAR/DESACTIVAR SONIDO
* - RESETEAR ERRORES
* - CEBAR PERISTALTICAS
* - HORAS ACTIVO
* - OFFSET RELOJ
* - CALIBRACION ULTRASONIDO
* - VOLVER

-SALIR



Como vereis acontinuación en el código utilizamos el subprograma:
- botpot(x,y) , desde aqui llamamos a programa que lee la posicion del potenciometro y mediante la funcion MAP nos dice en que menu según la posicion del potenciometro nos encontramos , X sería el inicio del menu (normalmente 1 e Y sería la ultima opción del menu). Nos devuelve la variable "menupot"

Código:
//CAP3.3 Manejando menus con boton y potenciometro

//LIBRERIAS
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>// Debemos instalar la libreria LiquidCrystal_I2C en la carpeta "libraries" del arduino IDE
LiquidCrystal_I2C lcd(0x27,16,2);  // direccion i2c(puede variar segun la placa) del LCD y columnas,lineas

/*PINES CONECTADO EN ARDUINO MEGA
ANALOGICOS:
A14 - Potenciometro

DIGITALES:
D19 - Boton
D20 - SDA I2C  / LCD
D21 - SCL I2C  / LCD

*/

//VARIABLES
byte boton=19, pot=A14; //declaramos que la variable de los pines donde esta conectado boton y potenciometro
int menupot;// numero de menu
byte vboton,menus, menuactual,cambiomenu;//variables para los menus

void setup()
{
  pinMode(boton, INPUT);//Inidicamos que es  una entrada 
  pinMode(pot, INPUT);
  
  lcd.init();//Inicializamos el LCD
  lcd.backlight();//Encendemos la luz
  lcd.print(" CAP3.3 MENUS ");
  
  delay(2000);//Hacemos una pausa de 2 segundos
  lcd.init();//Al inicializar el LCD tambien borramos la pantalla
}

void loop()
{

if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
    {
     menu(); // Activamos el subprograma menu
    }
delay(500);
}

void menu()
{
  lcd.init();
  lcd.print(" Menu principal ");
  delay(1000);
  iniciomenu://///// INICIO MENU, lo utilizaremos luego con el GOTO para volver a este punto
  botpot(1,2);//subprograma, indicamos que tenemos dentro de este menu 2 opciones, desde la 1 a la 2, si fueran 4 submenus seria botpot (1,4) (segun movamos el potenciometro)
  cambiomenu=1;//inicializamos variable
  switch (menupot) //menupot es la variable que hemos ajustado con el potenciometro
       
       {       
        case 1: //opcion 1
        if (cambiomenu==1) //Si hemos movido el potenciometro....
            {
              lcd.setCursor(0,1);
              lcd.print(" Submenu 1      ");
              if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                {
                  lcd.init();
                  lcd.print("Dentro Menu1  ");
                  delay(2000);
                  //Aqui pondriamos lo que quisieramos hacer en este menu
                }
              goto iniciomenu;
             }
        break;//Fin del submenu 1
        
        
        case 2:  //opcion 2
        if (cambiomenu==1)
          {
            lcd.setCursor(0,1);
            lcd.print(" Submenu 2      ");
            if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
              {
                lcd.init();
                lcd.print("Dentro Menu2  ");
                lcd.setCursor(0,1);
                lcd.print("Pulsa para salir");
                delay(2000);
                if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                    {
                      
                      break;//Salimos del swicth
                    }
                
                //Aqui pondriamos lo que quisieramos hacer en este menu
              }
            goto iniciomenu;
          }
        break;
       
     }
  lcd.init();
}



void botpot(int menuini, int menufin) //menuini y menufin son variables que hemos pasado cuando llamamos ala funcion botpot
{
 menupot=0;int i=0;int valpot=0;int leepot=0;
 leepot= analogRead(A14);//leemos posicion potenciometro
 while (i<4)
 {
 leepot= (leepot+ analogRead(A14));
 i++;
 }
 valpot=(leepot/5);//Lo leemos 5 veces para mayor fiabilidad
 menupot = map (valpot,0,1023,menuini,menufin); //La funcion MAP lo que hace es situar el valor leido dentro del rango que le pongamos
 if (menupot==menuactual) {cambiomenu=0;}//si no movemos el potenciometro el menu será el mismo , no habrá cambio asi no lo "dibujamos" otra vez en el LCD
 else {menuactual=menupot;cambiomenu=1;}
    
}

Lo dicho leerlo despacio y tratar de entenderlo.....y luego resolvemos las dudas aquí en el foro.

Saludos
 
Última edición:
10 Jun 2012
67
mataro
Provincia
barcelona
me va a salir humo por las orejas de leer y leer ,pero tranquilo que lo llegare a entenderlo todo ,nuevamente te doy las gracias por todo lo que estas haciendo por nosotros
 
11 Mar 2014
183
Santa Cruz de Tenerife
Provincia
Santa Cruz de Tenerife
B

Código:
//CAP3.3 Manejando menus con boton y potenciometro


void menu()
{
  lcd.init();
  lcd.print(" Menu principal ");
  delay(1000);
  iniciomenu://///// INICIO MENU, lo utilizaremos luego con el GOTO para volver a este punto
  botpot(1,2);//subprograma, indicamos que tenemos dentro de este menu 2 opciones, desde la 1 a la 2, si fueran 4 submenus seria botpot (1,4) (segun movamos el potenciometro)
  cambiomenu=1;//inicializamos variable
  switch (menupot) //menupot es la variable que hemos ajustado con el potenciometro
       
       {       
        case 1: //opcion 1
        if (cambiomenu==1) //Si hemos movido el potenciometro....
            {
              lcd.setCursor(0,1);
              lcd.print(" Submenu 1      ");
              if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                {
                  lcd.init();
                  lcd.print("Dentro Menu1  ");
                  delay(2000);
                  //Aqui pondriamos lo que quisieramos hacer en este menu
                }
              goto iniciomenu;
             }
        break;//Fin del submenu 1
        
        
        case 2:  //opcion 2
        if (cambiomenu==1)
          {
            lcd.setCursor(0,1);
            lcd.print(" Submenu 2      ");
            if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
              {
                lcd.init();
                lcd.print("Dentro Menu2  ");
                lcd.setCursor(0,1);
                lcd.print("Pulsa para salir");
                delay(2000);
                if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                    {
                      
                      break;//Salimos del swicth
                    }
                
                //Aqui pondriamos lo que quisieramos hacer en este menu
              }
            goto iniciomenu;
          }
        break;
       
     }
  lcd.init();
}

Una pregunta con ese codigo, al entrar en el submenu 1 faltarian estas lineas de codigo para poder salir despues de entrar ¿no?

Código:
lcd.print("Pulsa para salir");
                  delay(2000);
                  if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                    {
                      
                      break;//Salimos del swict//Aqui pondriamos lo que quisieramos hacer en este menu
                }


Quedando asi al final


Código:
void menu()
{
  lcd.init();
  lcd.print(" Menu principal ");
  delay(1000);
  iniciomenu://///// INICIO MENU, lo utilizaremos luego con el GOTO para volver a este punto
  botpot(1,2);//subprograma, indicamos que tenemos dentro de este menu 2 opciones, desde la 1 a la 2, si fueran 4 submenus seria botpot (1,4) (segun movamos el potenciometro)
  cambiomenu=1;//inicializamos variable
  switch (menupot) //menupot es la variable que hemos ajustado con el potenciometro
       
       {       
        case 1: //opcion 1
        if (cambiomenu==1) //Si hemos movido el potenciometro....
            {
              lcd.setCursor(0,1);
              lcd.print(" Submenu 1      ");
              if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                {
                  lcd.init();
                  lcd.print("Dentro Menu1  ");
                  lcd.print("Pulsa para salir");                  
                  delay(2000);
                  if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                    {
                      
                      break;//Salimos del swict//Aqui pondriamos lo que quisieramos hacer en este menu

                }delay(2000);
                  //Aqui pondriamos lo que quisieramos hacer en este menu
                }
              goto iniciomenu;
             }
        break;//Fin del submenu 1
        
        
        case 2:  //opcion 2
        if (cambiomenu==1)
          {
            lcd.setCursor(0,1);
            lcd.print(" Submenu 2      ");
            if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
              {
                lcd.init();
                lcd.print("Dentro Menu2  ");
                lcd.setCursor(0,1);
                lcd.print("Pulsa para salir");
                delay(2000);
                if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                    {
                      
                      break;//Salimos del swicth
                    }
                
                //Aqui pondriamos lo que quisieramos hacer en este menu
              }
            goto iniciomenu;
          }
        break;
       
     }
  lcd.init();
}


Gracias por la ayuda
 
28 May 2010
22
Espeña
Provincia
Madrid
Gracias Jorge!!
Ando un poco rezagao... ya tengo todo el jargual montao... ahora al compileitor!!
 
28 May 2010
22
Espeña
Provincia
Madrid
JVSC!

A lo que te refieres, es a que si no tienes esas líneas de código que has detallado tú, no sales del menú??
 
8 Nov 2013
62
España
Provincia
Cadiz
Hola a todo, hola Jorge.
Estoy muy perdido con este tema del controlador y por mas que lo intento no se como crear mis menús.
Vamos por partes. En el Sketchbook (programa) que jorge nos cuelga en el tutorial pone que usa una lcd de 16 caracteres x4 filas en mi casa tengo una de 20x4. Hasta aquí sin problemas.
Yo en mi programa que que ahora os pondré cambio el nombre del proyecto y lo pongo a mi gusta en las fila que quiero. Hasta aquí sin problemas.
Pero cuando me toca crear los menús en el punto que Jorge nos pone (aquí ponemos lo que queramos hacer en este menú) me quedo bloqueado, porque dentro del Sub menú 1 quiero poner 8 menús (Modulo Ph , T Agua, T. Pantalla....) y no se como tengo que hacerlo. también, dentro de cada menú quiere tener la posibilidad de volver a menú principal.

Os copio mi programa que es el mismo que el de jorge sobre el que estoy haciendo modificaciones, como por ejemplo lo de Los caracteres de la pantalla y los nombres de momento.

Muchas Gracias y espero que me podáis ayudar.

//CAP3.3 Manejando menus con boton y potenciometro


//LIBRERIAS
#include <Wire.h>
#include <LiquidCrystal_I2C.h>// Debemos instalar la libreria LiquidCrystal_I2C en la carpeta "libraries" del arduino IDE
LiquidCrystal_I2C lcd(0x27,20,4); // direccion i2c(puede variar segun la placa) del LCD y columnas,lineas


/*PINES CONECTADO EN ARDUINO MEGA
ANALOGICOS:
A14 - Potenciometro


DIGITALES:
D19 - Boton
D20 - SDA I2C / LCD
D21 - SCL I2C / LCD


*/


//VARIABLES
byte boton=19, pot=A14; //declaramos que la variable de los pines donde esta conectado boton y potenciometro
int menupot;// numero de menu
byte vboton,menus, menuactual,cambiomenu;//variables para los menus


void setup()
{
pinMode(boton, INPUT);//Inidicamos que es una entrada
pinMode(pot, INPUT);


lcd.init();//Inicializamos el LCD
lcd.backlight();//Encendemos la luz
lcd.setCursor(4,0);
lcd.print(" Reef JOMCO ");
lcd.setCursor(4,1);
lcd.print(" **** ***** ");
lcd.setCursor(2,3);
lcd.print("Pulsar Para Menu");


}


void loop()
{


if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
{
menu(); // Activamos el subprograma menu
}
delay(500);
}


void menu()
{
lcd.init();
lcd.print(" Menu principal ");
delay(1000);
iniciomenu://///// INICIO MENU, lo utilizaremos luego con el GOTO para volver a este punto
botpot(1,2);//subprograma, indicamos que tenemos dentro de este menu 2 opciones, desde la 1 a la 2, si fueran 4 submenus seria botpot (1,4) (segun movamos el potenciometro)
cambiomenu=1;//inicializamos variable
switch (menupot) //menupot es la variable que hemos ajustado con el potenciometro

{
case 1: //opcion 1
if (cambiomenu==1) //Si hemos movido el potenciometro....
{
lcd.setCursor(0,1);
lcd.print(" Submenu 1 ");
if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
{
lcd.init();
lcd.print("Dentro Menu 1 ");
delay(2000);
//Aqui pondriamos lo que quisieramos hacer en este menu

//Que tengo que poner aqui?? Como empiezo??


}
goto iniciomenu;
}
break;//Fin del submenu 1


case 2: //opcion 2
if (cambiomenu==1)
{
lcd.setCursor(0,1);
lcd.print(" Submenu 2 ");
if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
{
lcd.init();
lcd.print("Dentro Menu2 ");
lcd.setCursor(0,1);
lcd.print("Pulsa para salir");
delay(2000);
if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
{

break;//Salimos del swicth
}

//Aqui pondriamos lo que quisieramos hacer en este menu
}
goto iniciomenu;
}
break;

}
lcd.init();
}






void botpot(int menuini, int menufin) //menuini y menufin son variables que hemos pasado cuando llamamos ala funcion botpot
{
menupot=0;int i=0;int valpot=0;int leepot=0;
leepot= analogRead(A14);//leemos posicion potenciometro
while (i<4)
{
leepot= (leepot+ analogRead(A14));
i++;
}
valpot=(leepot/5);//Lo leemos 5 veces para mayor fiabilidad
menupot = map (valpot,0,1023,menuini,menufin); //La funcion MAP lo que hace es situar el valor leido dentro del rango que le pongamos
if (menupot==menuactual) {cambiomenu=0;}//si no movemos el potenciometro el menu será el mismo , no habrá cambio asi no lo "dibujamos" otra vez en el LCD
else {menuactual=menupot;cambiomenu=1;}

}

Bien, una vez tengamos el boton y el potenciometro funcionando vamos a crear un programa que los utilice para poder movernos por el menu que necesitemos en nuestro controlador.

El código de ejemplo que expongo es muy muy sencillo, se trata de un simple menú de 2 submenus, luego cada uno debe ir ampliandolo de tal forma que cumpla con sus requisitos.

Mi consejo es que primero anoteis en un papel la opciones que creeis importantes en vuestro controlador.
Por favor no copiar y pegar, ir leyendo linea a linea el código hasta que lo entendais , de esta manera os será más facil crear vuestro menu.
Este es el que yo uso:
* ESQUEMA MENUS

-CONFIGURACION MODULOS ACTIVOS
* - MODULO PH
* - MODULO RELLENO
* - MODULO TEMPERATURA AGUA
* - MODULO TEMPERATURA LEDs
* - MODULO LUCES
* - MODULO OLEAJE
* - MODULO HUMEDAD
* - MODULO PERISTALTICAS
* - MODULO ENCHUFES
* - MODULO ENCHUFES2
* - MODULO WIFI
* - VOLVER

-CONFIGURACION RELOJ
-ACCESOS DIRECTOS
* - MANTENIMIENTO
* - ENCHUFES MANUAL
* - CALIBRACION PH
* - MODO TORMENTA
* - TEST LUCES
* - RESUMEN LUCES
* - LCD NOCTURNO
* - ACTIVAR/DESACTIVAR SONIDO
* - RESETEAR ERRORES
* - CEBAR PERISTALTICAS
* - HORAS ACTIVO
* - OFFSET RELOJ
* - CALIBRACION ULTRASONIDO
* - VOLVER

-SALIR



Como vereis acontinuación en el código utilizamos el subprograma:
- botpot(x,y) , desde aqui llamamos a programa que lee la posicion del potenciometro y mediante la funcion MAP nos dice en que menu según la posicion del potenciometro nos encontramos , X sería el inicio del menu (normalmente 1 e Y sería la ultima opción del menu). Nos devuelve la variable "menupot"

Código:
//CAP3.3 Manejando menus con boton y potenciometro

//LIBRERIAS
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>// Debemos instalar la libreria LiquidCrystal_I2C en la carpeta "libraries" del arduino IDE
LiquidCrystal_I2C lcd(0x27,16,2);  // direccion i2c(puede variar segun la placa) del LCD y columnas,lineas

/*PINES CONECTADO EN ARDUINO MEGA
ANALOGICOS:
A14 - Potenciometro

DIGITALES:
D19 - Boton
D20 - SDA I2C  / LCD
D21 - SCL I2C  / LCD

*/

//VARIABLES
byte boton=19, pot=A14; //declaramos que la variable de los pines donde esta conectado boton y potenciometro
int menupot;// numero de menu
byte vboton,menus, menuactual,cambiomenu;//variables para los menus

void setup()
{
  pinMode(boton, INPUT);//Inidicamos que es  una entrada 
  pinMode(pot, INPUT);
  
  lcd.init();//Inicializamos el LCD
  lcd.backlight();//Encendemos la luz
  lcd.print(" CAP3.3 MENUS ");
  
  delay(2000);//Hacemos una pausa de 2 segundos
  lcd.init();//Al inicializar el LCD tambien borramos la pantalla
}

void loop()
{

if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
    {
     menu(); // Activamos el subprograma menu
    }
delay(500);
}

void menu()
{
  lcd.init();
  lcd.print(" Menu principal ");
  delay(1000);
  iniciomenu://///// INICIO MENU, lo utilizaremos luego con el GOTO para volver a este punto
  botpot(1,2);//subprograma, indicamos que tenemos dentro de este menu 2 opciones, desde la 1 a la 2, si fueran 4 submenus seria botpot (1,4) (segun movamos el potenciometro)
  cambiomenu=1;//inicializamos variable
  switch (menupot) //menupot es la variable que hemos ajustado con el potenciometro
       
       {       
        case 1: //opcion 1
        if (cambiomenu==1) //Si hemos movido el potenciometro....
            {
              lcd.setCursor(0,1);
              lcd.print(" Submenu 1      ");
              if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                {
                  lcd.init();
                  lcd.print("Dentro Menu1  ");
                  delay(2000);
                  //Aqui pondriamos lo que quisieramos hacer en este menu
                }
              goto iniciomenu;
             }
        break;//Fin del submenu 1
        
        
        case 2:  //opcion 2
        if (cambiomenu==1)
          {
            lcd.setCursor(0,1);
            lcd.print(" Submenu 2      ");
            if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
              {
                lcd.init();
                lcd.print("Dentro Menu2  ");
                lcd.setCursor(0,1);
                lcd.print("Pulsa para salir");
                delay(2000);
                if (digitalRead(boton)==HIGH)//Si pulsamos el boton entramos al menu
                    {
                      
                      break;//Salimos del swicth
                    }
                
                //Aqui pondriamos lo que quisieramos hacer en este menu
              }
            goto iniciomenu;
          }
        break;
       
     }
  lcd.init();
}



void botpot(int menuini, int menufin) //menuini y menufin son variables que hemos pasado cuando llamamos ala funcion botpot
{
 menupot=0;int i=0;int valpot=0;int leepot=0;
 leepot= analogRead(A14);//leemos posicion potenciometro
 while (i<4)
 {
 leepot= (leepot+ analogRead(A14));
 i++;
 }
 valpot=(leepot/5);//Lo leemos 5 veces para mayor fiabilidad
 menupot = map (valpot,0,1023,menuini,menufin); //La funcion MAP lo que hace es situar el valor leido dentro del rango que le pongamos
 if (menupot==menuactual) {cambiomenu=0;}//si no movemos el potenciometro el menu será el mismo , no habrá cambio asi no lo "dibujamos" otra vez en el LCD
 else {menuactual=menupot;cambiomenu=1;}
    
}

Lo dicho leerlo despacio y tratar de entenderlo.....y luego resolvemos las dudas aquí en el foro.

Saludos
 
Última edición:

jmcadsl

Miembro Honorífico
17 Ene 2010
851
España
Provincia
Madrid
  • Iniciador del tema
  • Moderador
  • #9
jomco....yo ahora estoy liadisimo...dame unos días y hago un ejemplo con un menu de 2 o 3 opciones y luego ya es ponerlo a tu gusto.
Un saludo
 

jmcadsl

Miembro Honorífico
17 Ene 2010
851
España
Provincia
Madrid
  • Iniciador del tema
  • Moderador
  • #11
Hola jomco y compañia!!

Te adjunto un codigo de ejmplo en el que solo se incluye como crear un menu , son 3 submenus y dentro del segundo se crean otros 3.

En todos ellos se vuelve al menu anterior.

Espero que te sirva de ayuda!!

Código:
/*Tutorial controlador CBOX Todomarino
 Ejemplo menu con botón y potenciómetro
 Pines:
 
A14 - Potenciometro
D19 - Botón
D20 - SDA I2C LCD
D21 - SCL I2C
*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);//YROBOT

byte pot=A14,boton=19;
byte menupot,vboton,menus, menuactual,cambiomenu;


void setup() {
 
 lcd.init();
 lcd.backlight();

}

void loop() {
 lcd.setCursor(0,0);
 lcd.print(" Tutorial C-BOX ");
 lcd.setCursor(0,1);
 lcd.print("  Ejemplo menu  ");
 delay(200);
 menu();
}

void menu()
{
  sboton();
  if (vboton==1)//Si se ha pulsado el boton entramos
  {
      lcd.init();
      lcd.print("Entrando al menu");
      delay(1500);
      cambiomenu==1;//Para refresacar el lcd si movemos el potenciometro
      iniciomenu: //Punto de control para volver con un goto
      botpot(1,3);//creamos 3 posiciones de menu para el firo del potenciometro
  
      switch (menupot)
      
          {
            case 1: //Menu 1
                  if (cambiomenu==1)
                      {
                        lcd.clear();
                        lcd.print("MENU 1");
                      }
                  sboton();
                  if (vboton==1)//SI PULSAMOS EL BOTON ENTRAMOS
                      {
                        lcd.init();
                        lcd.print("DENTRO DEL MENU1");
                        delay(2000);
                        cambiomenu==1;//Para refresacar el lcd si movemos el potenciometro
                        //AQUI HARIAMOS LO QUE NECESITARAMOS EN ESTE MENU
                        goto iniciomenu; //volvemos al inicio
                      }
                  break;
                  
                  
                  
                  
             case 2: //Menu 2  (Este consta de 2 submenus)
                    if (cambiomenu==1)
                        {
                          lcd.clear();
                          lcd.print("MENU 2");
                        }
                      sboton();
                      if (vboton==1)//SI PULSAMOS EL BOTON ENTRAMOS
                        {
                          lcd.init();
                          lcd.print(" DENTRO  MENU 2");
                          lcd.setCursor(0,1);
                          lcd.print("ACCESO SUBMENUS");
                          delay(2000);
                          cambiomenu==1;
                          iniciomenu2 ://Para volver al submenu2
                          botpot(1,3);//Creamos un menu de 3 opciones
                          switch (menupot)
                              {
                              case 1:
                               if (cambiomenu==1)
                                    {
                                      lcd.clear();
                                      lcd.print("MENU 2.1");
                                    }
                                sboton();
                                if (vboton==1)//SI PULSAMOS EL BOTON ENTRAMOS
                                    {
                                      lcd.init();
                                      lcd.print("DENTRO  MENU 2.1");
                                      delay(2000);
                                      cambiomenu==1;//Para refresacar el lcd si movemos el potenciometro
                                      //AQUI HARIAMOS LO QUE NECESITARAMOS EN ESTE MENU
                                      goto iniciomenu2; //volvemos al inicio
                                    }
                                break;
                                
                                
                                case 2:
                               if (cambiomenu==1)
                                    {
                                      lcd.clear();
                                      lcd.print("MENU 2.2");
                                    }
                                sboton();
                                if (vboton==1)//SI PULSAMOS EL BOTON ENTRAMOS
                                    {
                                      lcd.init();
                                      lcd.print("DENTRO  MENU 2.2");
                                      delay(2000);
                                      cambiomenu==1;//Para refresacar el lcd si movemos el potenciometro
                                      //AQUI HARIAMOS LO QUE NECESITARAMOS EN ESTE MENU
                                      goto iniciomenu2; //volvemos al inicio
                                    }
                                break;
                                
                                
                               case 3:
                               if (cambiomenu==1)
                                    {
                                      lcd.clear();
                                      lcd.print("MENU 2.3 - ATRAS");
                                    }
                                sboton();
                                if (vboton==1)//SI PULSAMOS EL BOTON ENTRAMOS
                                    {
                                      lcd.init();
                                      lcd.print("DENTRO  MENU 2.3");
                                      lcd.setCursor(0,1);
                                      lcd.print(" --ANTERIOR--");
                                      delay(2000);
                                      cambiomenu==1;//Para refresacar el lcd si movemos el potenciometro
                                      //AQUI HARIAMOS LO QUE NECESITARAMOS EN ESTE MENU
                                      goto iniciomenu; //volvemos al inicio
                                    }
                                break;
                              
                              }
                           goto iniciomenu2;
                        }
                  break;
                  
                 
              case 3: //Menu 3
                      if (cambiomenu==1)
                          {
                            lcd.clear();
                            lcd.print("MENU 3 - SALIDA");
                          }
                      sboton();
                      if (vboton==1)//SI PULSAMOS EL BOTON ENTRAMOS
                          {
                            lcd.init();
                            lcd.print("DENTRO DEL MENU3");
                            lcd.setCursor(0,1);
                            lcd.print(" ---SALIENDO---");
                            delay(2000);
                            cambiomenu==1;//Para refresacar el lcd si movemos el potenciometro
                            //AQUI HARIAMOS LO QUE NECESITARAMOS EN ESTE MENU
                            goto finmenu; //volvemos al inicio
                          }
                      break;    
            
          }
  goto iniciomenu;
  finmenu :
  lcd.clear();
  delay(200);
  }
  
  
 
 }
 
 
 
 
 void sboton()//Comprobar si se ha pulsado el boton
{
 vboton=0;
 vboton=digitalRead(boton);delay(100);
 if (vboton==1) {lcd.noBacklight();delay(200);lcd.backlight();menuactual=0;}
}




void botpot(byte menuini, byte menufin)//Comprobar si se ha movido el potenciometro
{
 menupot=0;byte i=0;int valpot=0;int leepot=0;
 leepot= analogRead(A14);
 while (i<4)
 {
 leepot= (leepot+ analogRead(A14));
 i++;
 }
 valpot=(leepot/5);
 menupot = map (valpot,0,1000,menuini,menufin);
 if (menupot==menuactual) {cambiomenu=0;}
 else {menuactual=menupot;cambiomenu=1;}
    
}

Un saludo
 
Arriba