esp32+micropython环境 请问如何实现按键切换灯串效果啊?

esp32+micropython环境
请问如何实现按键切换灯串效果啊?
一个gpio引脚做按键 一个gpio引脚做灯
几个效果的方法已经写好了
效果:按一下按键,响应一个效果,再按一下切换下一个效果如此循环。
问题:其中有三个效果使用循环语句写的,没办法跳出循环,就没办法切换效果。请问判断按键按下的语句要写在哪里才能实现切换?
下面是我的代码:请大神看下问题所在!


from machine import Pin,PWM,Timer
import time

def led_on():
    print('led_on')
    led.value(1)
def led_off():
    print('led_off')
    led.value(0)
def led_huxi():
    print('led_huxi')
    pwm = PWM(led)
    pwm.freq(1000)
    for duty in range(0,800,10):
        pwm.duty(duty)
        time.sleep_ms(10 )
    for duty in range(800,0,-10):
        pwm.duty(duty)
        time.sleep_ms(10)
def led_shan():
    print('led_shan')
    led.value(1)
    time.sleep_ms(1000)
    led.value(0)
def led_sos():
    print('led_sos')
    for i in range(3):
        led.value(1)
        time.sleep_ms(100)
        led.value(0)
        time.sleep_ms(100)
    for i in range(3):
        led.value(1)
        time.sleep_ms(500)
        led.value(0)
        time.sleep_ms(500)
    for i in range(3):
        led.value(1)
        time.sleep_ms(100)
        led.value(0)
        time.sleep_ms(100)

def key_control(key):
    global state
    time.sleep_ms(10)
    if key.value() == 1:
        return
    while key.value() == 0:
        pass
    state += 1
    if state == 1:
        led_on()
    elif state == 2:
        led_huxi()
    elif state == 3:
        led_shan()
    elif state == 4:
        led_sos()
    elif state == 5:
        led_off()
    elif state == 6:
        state = 0
       
led = Pin(5,Pin.OUT)
led.value(0)
key = Pin(18,Pin.IN,Pin.PULL_UP)
state = 0


key.irq(key_control,Pin.IRQ_FALLING

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。