Menú con submenus para LCD en Arduino + Encoder

Y con este van cuatro menús ya, mejorando de nuevo el código del anterior y esta vez haciendo uso de un encoder rotatorio para la interacción con el Arduino.

El código ha sido optimizado y simplificado, lo cual ha permitido una gran velocidad a la hora de desplazarse por las diferentes opciones del menú.

Recordar que el código es apto para funcionar con pantallas de diferentes lineas y columnas, solo hay que indicarlo en el código.
Al igual que los botones a usar, solo hay que cambiar el bloque de lectura y el enumerador Button.

17 thoughts on “Menú con submenus para LCD en Arduino + Encoder

  1. Saludos, he visto tus versiones anteriores. He resucitado mi LCD de un cajon, que antes no sabia ni usarlas… Quería preguntarte que librerias usas para este ejemplo de menus. Gracias.

    1. Hola Sergio,

      No uso ninguna librería salvo la del LCD por I2C, el menú está programado en el propio sketch.

      Si es esa la librería que necesitabas la encontrarás con el buscador con “LCD I2C”.

      Saludos.

  2. Hola buenos días, estoy teniendo problemas con el encoder, solamente me puedo desplazar en una dirección y en la otra no, ya probé de cambiar los pines y probar distintos encoders, existe la posibilidad de que halla un error en el código o yo estaré cometiendo algún error, desde ya muchas gracias

    1. Hola Franco, hay varios tipos de encoder y formas de conectarlo por lo que primero tienes que asegurarte que tu encoder funciona ya sea con tu propio código o con el mio añadiéndole además impresiones por SERIAL para depurar la función que recoge las lecturas. Cuando soluciones eso te funcionará el menú.
      Saludos

  3. Hola GILTESA,
    magnífica creación,
    Intenté cargar el código pero me envía el siguiente error:
    call of overloaded ‘createChar(const byte&, const byte [8])’ is ambiguous

    hasta pronto!

    1. Hola Cédric,

      Lo acabo de probar y me compila correctamente, asegúrate de usar la misma librería para controlar el LCD (esta publicada en el blog) o de adaptar el código a la tuya.

      Saludos.

    1. Hola Oskar,

      Es el carácter utilizado para acceder a los enumeradores o enum. Un enumerador es un conjunto de constantes enteras con un nombre definido, sus valores comienzan por el 0 de modo que para el enum Button las constantes Unknown, Ok, Left, Right se corresponden con los valores 0, 1, 2 y 3 respectivamente.

      Los valores se pueden personalizar pero en realidad nos da igual porque lo único que se hace es comparar una variable del tipo Button a la que se le asigno una de las constantes Button por las distintas constantes de Button…

      Es decir, la función readButtons() devuelve el tipo de dato Button y después en el main se compara la variable btnPressed (donde se volcó el valor de readButtons() ) con un if else:

      Si el valor que tiene btnPressed se corresponde con alguna de sus constantes posibles, entonces se realiza la acción deseada… quizás es un poco lioso al principio pero es la forma de tener el código ordenado y fácil de leer.

      Saludos.

  4. Lo estoy por probar … se te agradece compartir el Menu … estoy realizando un proyecto para la tesis de la Facu … una extrusora de filamento para impresion 3D … Voy a modificar el codigo para que se adapte a mi necesidades, despues cuando termine te dejo otro comentario para compartirtelo.

  5. Hola hno .. te hago una consulta .. como hago para ver el Submenu de forma vertical?? … y en caso de querer agregarle un submenu2 dentro del Submenu … como seria? … espero me puedas ayudar

    1. Hola Denis, el endfor1 y el endfor2 calculan cuántas filas de la pantalla es necesario repintar. Ese código fue una ampliación de otro usuario.
      El forceprint es un flag que permite ejecutar el bloque de código que repinta la pantalla cuando es necesario.
      Saludos.

    1. Lo acabo de probar y me funciona bien, ¿cuál es el error exacto que te da? Yo uso el IDE 1.8.5 (es bastante reciente aunque no el ultimo porque ya no programo mucho Arduino) intenta tener esa versión o superior.

Escriba aquí su comentario