from machine import Pin, Timer
import time
boton_a = Pin(18, Pin.IN, Pin.PULL_UP)
boton_b = Pin(16, Pin.IN, Pin.PULL_UP)
led_rojo = Pin(12, Pin.OUT)
led_amarillo = Pin(14, Pin.OUT)
led_verde = Pin (15, Pin.OUT)
BLOQUEADO = 0
ESPERANDO_B = 1
ACCESO_CONCEDIDO = 2
BLOQUEO_SEGURIDAD = 3
estado = BLOQUEADO
contador_fallos = 0
contador_a_acceso = 0
contador_a_espera = 0
ANTIREBOTE_MS = 250
ultimo_tiempo_a = 0
ultimo_tiempo_b = 0
timer_window = Timer(-1)
timer_access = Timer(-1)
timer_security = Timer(-1)
def set_leds(rojo, amarillo, verde):
led_rojo.value(rojo)
led_amarillo.value(amarillo)
led_verde.value(verde)
# Antes del bucle
print("BLOQUEADO")
print("La contraseña es A -> B")
# Bucle del programa
while True:
if estado == BLOQUEADO:
set_leds(0, 0, 0)
# Presionar A como se debe
if (boton_a.value() == 0):
estado = ESPERANDO_B
ultimo_tiempo_a = 0
print("Esperando a completar")
# Presionar B antes de A
if (boton_b.value() == 0):
contador_fallos = contador_fallos + 1
# Suficientes fallos
if (contador_fallos == 3):
estado = BLOQUEO_SEGURIDAD
# Insuficientes fallos
else:
estado = BLOQUEADO
print("BLOQUEADO")
print("La contraseña es A -> B")
if estado == ESPERANDO_B:
set_leds(0, 1, 0)
if (boton_b.value() == 0):
estado = ACCESO_CONCEDIDO
else:
ultimo_tiempo_a = ultimo_tiempo_a + ANTIREBOTE_MS
# Si pasan 5 segundos
if ultimo_tiempo_a >= 5000:
contador_fallos = contador_fallos + 1
# Suficientes fallos
if (contador_fallos == 3):
estado = BLOQUEO_SEGURIDAD
# Insuficientes fallos
else:
estado = BLOQUEADO
print("BLOQUEADO")
print("La contraseña es A -> B")
# Acesso concedido
if estado ==ACCESO_CONCEDIDO:
print("ACCESO CONCEDIDO")
set_leds(0, 0, 1)
time.sleep(3)
estado = BLOQUEADO
if estado == BLOQUEO_SEGURIDAD:
print("BLOQUEO DE SEGURIDAD")
set_leds(1, 0, 0)
time.sleep(10)
contador_fallos = 0
estado = BLOQUEADO
print("BLOQUEADO")
print("La contraseña es A -> B")
# Antirrebote
time.sleep(ANTIREBOTE_MS/1000)