import machine
from machine import Pin, SoftI2C , PWM
import time
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
from time import sleep
import utime
I2C_ADDR = 0x27
# AQUI VA
totalRows = 2
totalColumns = 16
i2c = SoftI2C(scl=Pin(17), sda=Pin(16), freq=10000)
lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns)
TECLA_ARRIBA = const(0)
TECLA_ABAJO = const(1)
teclas_presionadas = []
teclas = [['1', '2', '3', 'A'], ['4', '5', '6', 'B'], ['7', '8', '9', 'C'], ['*', '0', '#', 'D']]
# Pines del GPIO
filas = [3,4,5,6]
columnas = [7,8,9,10]
# define los pines de filas como salidas
fila_pines = [Pin(nombre_pin, mode=Pin.OUT) for nombre_pin in filas]
# define los pines de columnas como entradas
columna_pines = [Pin(nombre_pin, mode=Pin.IN, pull=Pin.PULL_DOWN) for nombre_pin in columnas]
buzzer_pin = 18
buzzer = Pin(buzzer_pin, Pin.OUT)
pir = Pin(0, Pin.IN, Pin.PULL_UP)
pin_led = Pin(1, Pin.OUT) # Por ejemplo, pin GPIO 2
pin_led2 = Pin(2, Pin.OUT) # Por ejemplo, pin GPIO 2
def control_led(estado):
if estado == "encender":
pin_led.on()
elif estado == "apagar":
pin_led.off()
else:
print("Estado inválido. Usa 'encender' o 'apagar'.")
def control_led2(estado):
if estado == "encender":
pin_led2.on()
elif estado == "apagar":
pin_led2.off()
else:
print("Estado inválido. Usa 'encender' o 'apagar'.")
def mostrar_mensaje(mensaje):
lcd.clear()
lcd.putstr(mensaje)
def sonar_zumbador():
buzzer.value(1)
time.sleep(1000)
buzzer.value(0)
def init():
for fila in range(0,4):
for columna in range(0,4):
fila_pines[fila].low()
def scan(fila, columna):
""" escanea todo el teclado """
# define la columna actual en alto -high-
fila_pines[fila].high()
tecla = None
# verifica por teclas si hay teclas presionadas
if columna_pines[columna].value() == TECLA_ABAJO:
tecla = TECLA_ABAJO
if columna_pines[columna].value() == TECLA_ARRIBA:
tecla = TECLA_ARRIBA
fila_pines[fila].low()
# devuelve el estado de la tecla
return tecla
print("Listo en espera")
valorBool = True
# define todas las columnas bajo -low-
init()
control_led("encender")
while True:
if valorBool == True:
mensaje_bienvenida = "Ingrese una Contrasena!"
mostrar_mensaje(mensaje_bienvenida)
if pir.value() == 1:
print("Movimiento detectado")
control_led("apagar")
control_led2("encender")
buzzer= PWM(Pin(18))
buzzer.freq(500)
buzzer.duty_u16(8000)
sleep(1)
buzzer.duty_u16(0)
else:
print("No se ha detectado movimiento")
control_led2("apagar")
control_led("encender")
time.sleep(1)
for fila in range(4):
for columna in range(4):
tecla = scan(fila, columna)
if tecla == TECLA_ABAJO:
sleep(0.5)
ultima_tecla_presionada = teclas[fila][columna]
if ultima_tecla_presionada == "*":
# Comprobar la contraseña
contraseña_correcta = "1234" # Cambiar por tu contraseña deseada
if ''.join(teclas_presionadas) == contraseña_correcta:
control_led("apagar")
control_led2("encender")
print("Contraseña correcta!")
mensaje_bienvenida = "Contrasena correcta!"
mostrar_mensaje(mensaje_bienvenida)
time.sleep(1)
lcd.clear()
buzzer= PWM(Pin(18))
buzzer.freq(500)
buzzer.duty_u16(8000)
sleep(1)
buzzer.duty_u16(0)
control_led2("apagar")
valorBool=True
else:
print("Contraseña incorrecta!")
mensaje_incorrecto = "Contrasena incorrecta!"
mostrar_mensaje(mensaje_incorrecto)
time.sleep(1)
lcd.clear()
# Reiniciar la lista de teclas presionadas
teclas_presionadas = []
else:
# Agregar la tecla presionada a la lista
if ultima_tecla_presionada == "#" or valorBool == False:
valorBool=False
lcd.clear()
if ultima_tecla_presionada != "#":
teclas_presionadas.append(ultima_tecla_presionada)
# Convertir la lista de teclas presionadas en una cadena
teclas_ingresadas = ''.join(teclas_presionadas)
print("Teclas ingresadas:", teclas_ingresadas)
mostrar_mensaje(teclas_ingresadas)