"""
                # MÉTODO 1 - CON VARIABLES DE ESTADO
from machine import Pin
from time import sleep


LEDPin = 0
myLED = Pin(LEDPin, Pin.OUT)


butPin = 20
myButton = Pin(butPin, Pin.IN, Pin.PULL_UP)
butStateNow = 1
butStateOld = 1
LEDState = False
while True:
    butStateNow = myButton.value()
    if butStateNow == 1 and butStateOld == 0:
        LEDState = not LEDState
        myLED.value(LEDState)
    butStateOld = butStateNow
    sleep(.1)
"""
"""
                # MÉTODO2 - 'LEYENDO' LA SALIDA
from machine import Pin
from time import sleep


# Configuración de pines
boton = Pin(20, Pin.IN, Pin.PULL_UP)
led = Pin(0, Pin.OUT)


# Variable de estado para el LED
led_encendido = False           # 'Arranca' con el LED APAGADO


# Bucle principal
while True:
    if boton.value() == 0:  # Si el botón está presionado
        sleep(0.1)
        led_encendido = not led_encendido  # Alternar el estado del LED
        led.value(1 if led_encendido else 0)  # Encender o apagar el LED según el estado
    sleep(0.2)
"""
               # MÉTODO 3 CON FUNCIONES
"""
from machine import Pin
from time import sleep


LEDPin = 0
myLED = Pin(LEDPin, Pin.OUT)


butPin = 20
myButton = Pin(butPin, Pin.IN, Pin.PULL_UP)


def toggle_LED():
    LED_state = not myLED.value()
    myLED.value(LED_state)


def button_pressed():
    return myButton.value() == 0


def wait_for_button_release():
    while myButton.value() == 0:
        pass


while True:
    if button_pressed():
        toggle_LED()
        wait_for_button_release()
    sleep(0.1)
"""
# CON IRQs POR HARDWARE
"""
from machine import Pin
from time import sleep

LEDPin = 0
myLED = Pin(LEDPin, Pin.OUT)

butPin = 20
myButton = Pin(butPin, Pin.IN, Pin.PULL_UP)

# Función para manejar la interrupción del botón
def button_interrupt_handler(pin):
    global LEDState
    LEDState = not LEDState
    myLED.value(LEDState)

# Configurar la interrupción del botón
myButton.irq(trigger=Pin.IRQ_FALLING, handler=button_interrupt_handler)

# Estado inicial del LED y del botón
LEDState = False

# Bucle principal
while True:
    # Aquí puedes realizar otras tareas mientras el programa espera las interrupciones
    sleep(.1)
"""
from machine import Pin
import time

# Configurar el pin del LED y el botón
led = Pin(0, Pin.OUT)
boton = Pin(20, Pin.IN, Pin.PULL_UP)  # Usar PULL_UP ya que el otro pin del botón está conectado a GND

estado_led = False

def toggle_led():
    global estado_led
    estado_led = not estado_led
    led.value(estado_led)

def main():
    estado_anterior_boton = boton.value()
    while True:
        estado_actual_boton = boton.value()
        if estado_actual_boton and not estado_anterior_boton:
            toggle_led()
        estado_anterior_boton = estado_actual_boton
        time.sleep(0.1)  # Pequeña pausa para evitar rebotes

if __name__ == '__main__':
    main()