#Menu con despliegue en LCD y un esquema de interacción
#
#Pograma editado por:BLANCO CERON JOSUE ANDRE, CASTILLO LOPEZ DONALDO, RAFAEL ZAMUDIO
#
# Xalapa, Veracruz, México
#
# 2023 - Septiembre
#
from machine import Pin, SoftI2C
from time import sleep
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
import dht
import time
import machine
#creando objetos para la lcd
I2C_ADDR = 0x27
totalRows = 10 #cantidad de filas
totalColumns = 20 #cantidad de columnas
i2c = SoftI2C (scl=Pin(22), sda=Pin(21)) #inicio de la i2c
lcd = I2cLcd (i2c, I2C_ADDR, totalRows, totalColumns)
# Configura los pines de los botones
boton1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_UP) # Reemplaza los números de pin por los adecuados
boton2 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
boton3 = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_UP)
boton4 = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_UP)
# Incorporamos el parámetro para mostrar el nombre del menú
def mostrar_menu(nombre, opciones):
lcd.putstr(nombre)
lcd.move_to(0, 1)
lcd.putstr('Seleccione opción:')
for clave in sorted(opciones):
lcd.move_to(0, opciones[clave][2])
lcd.putstr(f'{clave}) {opciones[clave][0]}')
#Damos valores para cada boton y nos de un retorno
def leer_opcion(opciones):
while True:
if not boton1.value():
return '1'
elif not boton2.value():
return '2'
elif not boton3.value():
return '3'
elif not boton4.value():
return '4'
#Ejecutamos las opciones
def ejecutar_opcion(opcion, opciones):
opciones[opcion][1]()
# Incorporamos el parámetro para mostrar el nombre del menú
def mostrar_menu(nombre, opciones):
for clave in sorted(opciones):
lcd.move_to(0, opciones[clave][2])
lcd.putstr(f'{opciones[clave][0]}')
def button_pressed_isr(pin):
def leer_opcion(opciones):
# Lee el botón o encoder rotativo para obtener la opción seleccionada
while True:
# Puedes utilizar aquí las funciones específicas de tu hardware para obtener la entrada del usuario
opcion = obtener_entrada_usuario()
if opcion in opciones:
return opcion
def ejecutar_opcion(opcion, opciones):
opciones[opcion][1]()
# Incorporamos el parámetro para mostrar el nombre del menú
def generar_menu(nombre, opciones, opcion_salida):
opcion = None
while opcion != opcion_salida:
mostrar_menu(nombre, opciones) # Muestra el Menú
opcion = leer_opcion(opciones) # Lee la entrada del usuario
ejecutar_opcion(opcion, opciones) # Ejecuta la opción seleccionada
# ESTRUCTURA del MENÚ
def menu_principal():
lcd.putstr('menu principal')
opciones = {
'1': ('>>>entrar ', menu_principal, 1), # Acción de una llamada a un...
'2': (' esperar ', menuuu, 2), # submenu que genera un...
'3': (' ', Espera, 3), # nuevo menú
'4': ('', menu_principal, 0), # nuevo menú
}
generar_menu('Menu principal', opciones, 'x') # Nombre del menú
def Espera():
lcd.putstr('menu principal')
opciones = {
'1': (' ', menu_principal, 1), # Acción de una llamada a un...
'2': ('>>>', esperarr, 2), # submenu que genera un...
'3': (' ', Espera, 3), # nuevo menú
'4': ('', menu_principal, 0), # nuevo menú
}
generar_menu('Menu principal', opciones, 'x') # Nombre del menú
def esperarr():
lcd.putstr('menu principal')
opciones = {
'1': (' ', menu_principal, 1), # Acción de una llamada a un...
'2': (' ', menu_principal, 2), # submenu que genera un...
'3': (' ', menu_principal, 3), # nuevo menú
'4': (' ', menu_principal, 0), # nuevo menú
}
generar_menu('Menu principal', opciones, 'x') # Nombre del menú
def menuuu():
lcd.putstr('menu principal')
opciones = {
'1': (' Opción 1 > ', menu_principal, 1), # Acción de una llamada a un...
'2': (' Opción 2 >', menuu, 2), # submenu que genera un...
'3': (' Opción 3 >', menuu, 3), # nuevo menú
'4': ('', menuu, 0), # nuevo menú
}
generar_menu('Menu principal', opciones, 'x') # Nombre del menú
def menuu():
opciones = {
'1': ('>>>Opción 1 ', menu_principal, 1), # Acción de una llamada a un...
'2': (' Opción 2 ', submenu1, 2), # submenu que genera un...
'3': (' Opción 3 ', menux, 3), # nuevo menú
'4': ('', menuu, 0),
}
generar_menu('', opciones, 'x') # Nombre del menú
def menux():
opciones = {
'1': (' Opción 1', menu_principal, 1), # Acción de una llamada a un...
'2': ('>>>Opción 2', submenu2, 2), # submenu que genera un...
'3': (' Opción 3', menu2, 3), # nuevo menú
'4': ('', menuu, 0),
}
generar_menu('', opciones, 'x') # Nombre del menú
def menu2():
opciones = {
'1': (' Opción 1', menu_principal, 1), # Acción de una llamada a un...
'2': (' Opción 2', submenu3, 2), # submenu que genera un...
'3': ('>>>Opción 3', menu3, 3), # nuevo menú
'4': ('', menux, 0),
}
generar_menu('', opciones, 'x') # Nombre del menú
def menu3():
opciones = {
'1': (' Opción 2 >', menu_principal, 1), # Acción de una llamada a un...
'2': (' Opción 3 >', submenu4, 2), # submenu que genera un...
'3': ('>>>Opción 4 >', menu4, 3),
'4': ('', menu2, 0),
}
generar_menu('', opciones, 'x') # Nombre del menú
def menu4():
opciones = {
'1': (' Opción 3 >', menu_principal, 1), # Acción de una llamada a un...
'2': (' Opción 4 >', submenu5, 2), # submenu que genera un...
'3': ('>>>Opción 5 > ', menu5, 3), # nuevo menú
'4': ('', menu3, 0),
}
generar_menu('', opciones, 'x') # Nombre del menú
def menu5():
opciones = {
'1': (' Opción 4 >', menu_principal, 1), # Acción de una llamada a un...
'2': (' Opción 5 >', submenu6, 2), # submenu que genera un...
'3': ('>>>Opción 6 > ', menu6, 3), # nuevo menú
'4': ('', menu4, 0),
}
generar_menu('', opciones, 'x') # Nombre del menú
def menu6():
opciones = {
'1': (' Opción 5 >', menu_principal, 1), # Acción de una llamada a un...
'2': (' Opción 6 >', submenu7, 2), # submenu que genera un...
'3': ('>>>Opción 7 > ', menu6, 3), # nuevo menú
'4': ('', menu5, 0),
}
generar_menu('', opciones, 'x') # Nombre del menú
def submenu1():
opciones = {
'1': ('Opción 1 ', menuu, 0),
'2': ('>>>VERDE ', a, 1),
'3': (' ROJO ', submenu11, 2),
'4': (' AZUL ', submenu1, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def submenu11():
opciones = {
'1': (' Verde', menuu, 0),
'2': ('>>>Rojo', aa, 1),
'3': (' Azul', submenu12, 2),
'4': ('', submenu1, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def submenu12():
opciones = {
'1': (' Verde', menuu, 0),
'2': (' Rojo', ab, 1),
'3': ('>>>AZUL', submenu12, 2),
'4': ('', submenu11, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def a():
opciones = {
'1': ('Opción 1=== ', submenu1, 0),
'2': ('se elijio verde', submenu1, 1),
'3': (' ', submenu1, 2),
'4': (' ', submenu1, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def aa():
opciones = {
'1': ('Opción 1=== ', submenu11, 0),
'2': ('se elijio rojo', submenu11, 1),
'3': (' ', submenu11, 2),
'4': (' ', submenu11, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def ab():
opciones = {
'1': ('Opción 1=== ', submenu12, 0),
'2': ('se elijio azul', submenu12, 1),
'3': (' ', submenu12, 2),
'4': (' ', submenu12, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def submenu2():
opciones = {
'1': ('OPción 2 ', menux, 0),
'2': ('>>>Opción f ', b, 1),
'3': (' Opción g ', submenu21, 2),
'4': (' menú principal', submenu2, 3),
}
generar_menu('', opciones, 'd') # Nombre del submenú
def submenu21():
opciones = {
'1': ('', menux, 0),
'2': (' Opción f ', ba, 1),
'3': ('>>>Opción g ', submenu22, 2),
'4': (' menu principal ', submenu2, 3),
}
generar_menu('', opciones, 'd') # Nombre del submenú
def submenu22():
opciones = {
'1': ('', menux, 0),
'2': (' Opción f', menux, 1),
'3': (' Opción g', submenu22, 2),
'4': ('>>>Pantalla anterior', submenu21, 3),
}
generar_menu('', opciones, 'd') # Nombre del submenú
def b():
opciones = {
'1': ('Opción 1=== ', submenu2, 0),
'2': ('se elijio f ', submenu2, 1),
'3': (' ', submenu2, 2),
'4': (' ', submenu2, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def ba():
opciones = {
'1': ('Opción 1=== ', submenu21, 0),
'2': ('se elijio g', submenu21, 1),
'3': (' ', submenu21, 2),
'4': (' ', submenu21, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def submenu3():
opciones = {
'1': ('Opción 3 ', menu2, 0),
'2': ('>>>VERDE ', a, 1),
'3': (' ROJO ', submenu31, 2),
'4': (' AZUL ', submenu3, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def submenu31():
opciones = {
'1': ('Opción 3 ', menu2, 0),
'2': (' VERDE ', aa, 1),
'3': ('>>>ROJO ', submenu32, 2),
'4': (' AZUL ', submenu3, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def submenu32():
opciones = {
'1': ('OPCIÖN 3 ', menu2, 0),
'2': (' VERDE ', ab, 1),
'3': (' ROJO ', submenu32, 2),
'4': ('>>>AZUL ', submenu31, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def submenu4():
opciones = {
'1': ('>>>Motor A ', menu3, 1),
'2': (' Motor B ', c, 2),
'3': (' Motor C ', submenu41, 3),
'4': ('Opcion 4 ', submenu4, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu41():
opciones = {
'1': (' Motor A', menu3, 1),
'2': ('>>>Motor B', ca, 2),
'3': (' Motor C', submenu42, 3),
'4': ('Opcion 4 ', submenu4, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu42():
opciones = {
'1': (' Motor A', menu3, 1),
'2': (' Motor B', cb, 2),
'3': ('>>>Motor C', submenu42, 3),
'4': ('Opcion 4 ', submenu41, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu5():
opciones = {
'1': ('>>>Motor A ', menu4, 1),
'2': (' Motor B ', c, 2),
'3': (' Motor C ', submenu51, 3),
'4': ('Opcion 5 ', submenu5, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu51():
opciones = {
'1': (' Motor A ', menu4, 1),
'2': ('>>>Motor B ', ca, 2),
'3': (' Motor C ', submenu52, 3),
'4': ('Opcion 5 ', submenu5, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu52():
opciones = {
'1': (' Motor A', menu4, 1),
'2': (' Motor B', cb, 2),
'3': ('>>>Motor C', submenu52, 3),
'4': ('Opcion 5 ', submenu51, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu6():
opciones = {
'1': ('>>>Motor A ', menu5, 1),
'2': (' Motor B ', c, 2),
'3': (' Motor C ', submenu61, 3),
'4': ('Opcion 6 ', submenu6, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu61():
opciones = {
'1': (' Motor A ', menu5, 1),
'2': ('>>>Motor B ', ca, 2),
'3': (' Motor C ', submenu62, 3),
'4': ('Opcion 6 ', submenu6, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu62():
opciones = {
'1': (' MOtor A ', menu5, 1),
'2': (' Motor B ', cb, 2),
'3': ('>>>Motor C ', submenu62, 3),
'4': ('Opcion 6 ', submenu61, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu7():
opciones = {
'1': ('>>>Motor A ', menu6, 1),
'2': (' Motor B ', c, 2),
'3': (' Motor C ', submenu71, 3),
'4': ('Opcion 7 ', submenu7, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu71():
opciones = {
'1': (' Motor A', menu6, 1),
'2': ('>>>Motor B', ca, 2),
'3': (' Motor C', submenu72, 3),
'4': ('Opcion 7 ', submenu7, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def submenu72():
opciones = {
'1': (' Motor A ', menu6, 1),
'2': (' Motor B ', cb, 2),
'3': ('>>>Motor C ', submenu72, 3),
'4': ('Opcion 7 ', submenu71, 0),
}
generar_menu('Submenú', opciones, 'x') # Nombre del submenú
def c():
opciones = {
'1': ('Opción 1=== ', menu_principal, 0),
'2': ('se elijio motor A', menu_principal, 1),
'3': (' ', menu_principal, 2),
'4': (' ', menu_principal, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def ca():
opciones = {
'1': ('Opción 1=== ', menu_principal, 0),
'2': ('se elijio Motor B', menu_principal, 1),
'3': (' ', menu_principal, 2),
'4': (' ', menu_principal, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
def cb():
opciones = {
'1': ('Opción 1=== ', menu_principal, 0),
'2': ('se elijio Motor C', menu_principal, 1),
'3': (' ', menu_principal, 2),
'4': (' ', menu_principal, 3),
}
generar_menu('', opciones, 'x') # Nombre del submenú
if __name__ == '__main__':
menu_principal()