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()
$abcdeabcde151015202530fghijfghij