Asynchronous 如何将一个传感器链接到一个异步循环,只要传感器输入高,该循环就会运行,然后对另一个传感器重复相同的过程?

Asynchronous 如何将一个传感器链接到一个异步循环,只要传感器输入高,该循环就会运行,然后对另一个传感器重复相同的过程?,asynchronous,python-asyncio,esp8266,micropython,Asynchronous,Python Asyncio,Esp8266,Micropython,我在这里束手无策。我用了两个不同的传感器。当触发第一个传感器时,我希望黄色LED每秒闪烁一次。当触发第二个传感器时,我希望红色LED每秒闪烁两次。我可以一次做一个,这是可以的,但我不能让这个过程重复(如中所示,我将触发第一个传感器并播放黄色LED图案,但再次触发该传感器无效。除非关闭程序并重新启动,否则我也无法触发另一个传感器。请注意,以下代码是ESP8266-12E上的Micropython代码 import uasyncio as asyncio import machine import

我在这里束手无策。我用了两个不同的传感器。当触发第一个传感器时,我希望黄色LED每秒闪烁一次。当触发第二个传感器时,我希望红色LED每秒闪烁两次。我可以一次做一个,这是可以的,但我不能让这个过程重复(如中所示,我将触发第一个传感器并播放黄色LED图案,但再次触发该传感器无效。除非关闭程序并重新启动,否则我也无法触发另一个传感器。请注意,以下代码是ESP8266-12E上的Micropython代码

import uasyncio as asyncio
import machine
import time
import os

# Yellow LED: Pin 15
Y_LED = machine.PWM(machine.Pin(15))
Y_LED.freq(300)

# Red LED: Pin 2
R_LED = machine.PWM(machine.Pin(2))
R_LED.freq(300)

H2_1 = machine.Pin(9, machine.Pin.IN, machine.Pin.PULL_UP)

H2_2 = machine.Pin(4, machine.Pin.IN, machine.Pin.PULL_UP)

async def FlashRed():
  for i in range (20):
    R_LED.duty(1023)
    await asyncio.sleep(0.5)
    R_LED.duty(0)
    await asyncio.sleep(0.5)

async def FlashYellow():
  for i in range (10):
    Y_LED.duty(1023)
    await asyncio.sleep(1)
    Y_LED.duty(0)
    await asyncio.sleep(1)    

loop = asyncio.get_event_loop()

def Check_Button():
  while True:
    if H2_1.value():
      loop.create_task(FlashRed())
      loop.run_forever()
    if H2_2.value():
      loop.create_task(FlashYellow())
      loop.run_forever()
    time.sleep(0.1)

while True:
    Check_Button()
我想让电路板在引脚9高时显示一个闪烁的红色LED,然后显示闪烁的红色LED,直到引脚9低

我还希望电路板在引脚4高时显示闪烁的黄色LED,同样,在引脚4低之前显示闪烁的黄色LED

我希望能够同时或独立触发引脚9红色模式和引脚4黄色LED模式

目前,我只能做一个或另一个。电路板等待引脚9或引脚4的输入,这很好。当引脚9变高时,电路板正确显示红色闪烁的LED图案。该图案重复10次,这很好。但是,在图案完成后,我无法再次启动,也无法启动黄色闪烁g LED模式。如果我以黄色模式开始,我无法重新启动黄色模式,也无法启动红色模式。我必须退出脚本并重新开始

循环检查按钮()对我不起作用


任何帮助都将不胜感激。谢谢!

如果您有更多事情要做,您不想调用
永远运行
,因为它将永远运行循环,即使在创建的任务完成之后

我无法对此进行测试,但您可以尝试以下方法:

async def Check_Button():
    while True:
        if H2_1.value():
            loop.create_task(FlashRed())
        if H2_2.value():
            loop.create_task(FlashYellow())
        await asyncio.sleep(0.1)

loop.run_until_complete(Check_Button())
谢谢你:)。你能帮忙真是太好了。