from machine import Pin
import time
class Elevador:
def __init__(self):
# Definición de los pines de los LEDs
self.leds = {
1: Pin(4, Pin.OUT), # LED Naranja 1 - Pin 4
2: Pin(17, Pin.OUT), # LED Naranja 2 - Pin 17
3: Pin(5, Pin.OUT), # LED Naranja 3 - Pin 5
4: Pin(18, Pin.OUT), # LED Naranja 4 - Pin 18
5: Pin(16, Pin.OUT), # LED Verde - Pin 16
6: Pin(0, Pin.OUT), # LED Rojo - Pin 0
7: Pin(19, Pin.OUT), # LED Rosa - Pin 19 (nuevo)
}
# Definición de los pines de los botones
self.botones = {
32: Pin(32, Pin.IN, Pin.PULL_UP), # Botón 1 - Pin 32
33: Pin(33, Pin.IN, Pin.PULL_UP), # Botón 2 - Pin 33
34: Pin(34, Pin.IN, Pin.PULL_UP), # Botón 3 - Pin 34
35: Pin(35, Pin.IN, Pin.PULL_UP), # Botón 4 - Pin 35
}
def prender_led(self, led_num):
"""Enciende el LED correspondiente"""
self.leds[led_num].value(1)
def apagar_led(self, led_num):
"""Apaga el LED correspondiente"""
self.leds[led_num].value(0)
def parpadear_led(self, led_num, duracion):
"""Hace parpadear un LED durante el tiempo especificado (en segundos)"""
inicio = time.time()
while time.time() - inicio < duracion:
self.prender_led(led_num)
time.sleep(0.5) # El LED se enciende por 0.5 segundos
self.apagar_led(led_num)
time.sleep(0.5) # El LED se apaga por 0.5 segundos
def realizar_accion(self, boton_num):
"""Realiza la acción según el botón presionado"""
# Enciende el LED naranja correspondiente
if boton_num == 32:
self.prender_led(1) # LED Naranja 1
elif boton_num == 33:
self.prender_led(2) # LED Naranja 2
elif boton_num == 34:
self.prender_led(3) # LED Naranja 3
elif boton_num == 35:
self.prender_led(4) # LED Naranja 4
# Secuencia de LEDs
# 1. Enciende el LED verde (Cerrando puertas)
self.prender_led(5)
time.sleep(5) # Espera 5 segundos
self.apagar_led(5) # Apaga el LED verde
# 2. Enciende el LED rojo (Puertas cerradas)
self.prender_led(6)
time.sleep(5) # Espera 5 segundos
self.apagar_led(6) # Apaga el LED rojo
# 3. LED Rosa parpadeando durante 5 segundos
self.parpadear_led(7, 5) # Parpadea el LED rosa por 5 segundos
# 4. Enciende el LED verde nuevamente (Cerrando puertas)
self.prender_led(5)
time.sleep(5) # Espera 5 segundos
self.apagar_led(5) # Apaga el LED verde
# 5. Enciende el LED rojo nuevamente (Puertas cerradas)
self.prender_led(6)
time.sleep(5) # Espera 5 segundos
self.apagar_led(6) # Apaga el LED rojo
# 6. Apaga todos los LEDs de los pisos
self.apagar_led(1)
self.apagar_led(2)
self.apagar_led(3)
self.apagar_led(4)
def esperar_boton(self):
"""Espera que se presione un botón y devuelve el número del botón presionado"""
for boton_num, boton in self.botones.items():
if not boton.value(): # Si el botón está presionado (Pin en LOW)
time.sleep(0.2) # Pausa para evitar rebotes
if not boton.value(): # Verifica que el botón sigue presionado
return boton_num # Devuelve el número del botón presionado
return None # Ningún botón presionado
def ejecutar(self):
"""Método principal que ejecuta el ciclo del elevador"""
while True:
boton_presionado = self.esperar_boton()
if boton_presionado:
print(f"Botón {boton_presionado - 31} presionado")
self.realizar_accion(boton_presionado) # Realiza la acción correspondiente al botón presionado
else:
time.sleep(0.1) # Si no se presiona ningún botón, espera brevemente
# Crear una instancia de la clase Elevador y ejecutar el ciclo
if __name__ == '__main__':
elevador = Elevador()
elevador.ejecutar()