import machine
from machine import Pin, SoftI2C
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
from time import sleep
# Constantes para el teclado matricial
Tecla_Arriba = const(0)
Tecla_Abajo = const(1)
teclas = [['1', '2', '3', 'A'], ['4', '5', '6', 'B'], ['7', '8', '9', 'C'], ['*', '0', '#', 'D']]
filas = [2, 4, 5, 19]
columnas = [12, 27, 26, 25]
pines_Filas = [Pin(pin_nombre, mode=Pin.OUT) for pin_nombre in filas]
pines_Columnas = [Pin(pin_nombre, mode=Pin.IN, pull=Pin.PULL_DOWN) for pin_nombre in columnas]
def inicio_teclado():
for fila in range(0, 4):
for col in range(0, 4):
pines_Filas[fila].value(0)
def escanear_teclado(fila, columna):
pines_Filas[fila].value(1)
key = None
if pines_Columnas[columna].value() == Tecla_Abajo:
key = Tecla_Abajo
if pines_Columnas[columna].value() == Tecla_Arriba:
key = Tecla_Arriba
pines_Filas[fila].value(0)
return key
def captura_teclado():
last_key_press = 'e'
for fila in range(4):
for columna in range(4):
tecla = escanear_teclado(fila, columna)
if tecla == Tecla_Abajo:
last_key_press = teclas[fila][columna]
return last_key_press
# Configuración de la pantalla LCD
I2C_ADDR = 0x27
totalRows = 2
totalColumns = 16
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)
lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns)
def nomb():
lcd.putstr("Fabian Redondo")
lcd.move_to(0, 1)
lcd.putstr("20212673089")
sleep(5)
lcd.clear()
# Función para mostrar el menú principal
def show_menu():
lcd.putstr("1.Servo 2.Paso")
lcd.move_to(0, 1)
lcd.putstr("3.Temp 4.Volver")
# Función para mostrar el menú de modo manual
def show_manual_mode():
lcd.putstr("A) Modo manual")
sleep(2)
lcd.clear()
# Función para manejar el error
def show_error(message):
lcd.clear()
lcd.putstr(message)
sleep(2)
nomb()
# Bucle principal
while True:
show_manual_mode() # Muestra el menú de modo manual
lcd.clear()
lcd.putstr("Presione 'A' para continuar")
inicio_teclado()
while True:
key_input = captura_teclado()
if key_input != 'e':
break
if key_input == 'A': # Si se selecciona el modo manual
while True: # Bucle para el menú principal
lcd.clear()
show_menu() # Muestra el menú principal
sleep(1)
while True:
key_input = captura_teclado()
if key_input != 'e':
break
if key_input in ['1', '2', '3']:
lcd.clear()
lcd.putstr("Seleccionaste: " + key_input)
sleep(2)
if key_input == '1':
lcd.clear()
lcd.putstr("Opcion 1: Servo")
sleep(2)
lcd.clear()
# Agregar la lógica para la opción Servo
elif key_input == '2':
lcd.clear()
lcd.putstr("Opcion 2: Paso")
sleep(2)
lcd.clear()
# Agregar la lógica para la opción Paso a paso
elif key_input == '3':
lcd.clear()
lcd.putstr("Opcion 3: Sensor")
sleep(2)
lcd.clear()
# Agregar la lógica para la opción Sensor
elif key_input == '4':
# La opción 4 es seleccionada, volver al bucle principal
lcd.clear()
break
else:
show_error("Intente de nuevo.")
sleep(2)
lcd.clear()
else:
show_error("Intente de nuevo.")
sleep(2)
lcd.clear()