我如何 link 将一个传感器连接到只要传感器输入为高就运行的异步循环,然后用另一个传感器重复相同的过程?

How do I link one sensor to an asynchronous loop that runs as long as the sensor input is high, and then repeat the same process with another sensor?

我已经无计可施了。我正在使用 2 个不同的传感器。当第一个传感器被触发时,我想每秒闪烁一次黄色 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,然后在引脚 9 为低电平时显示闪烁的红色 LED。

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

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

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

循环 Check_Button() 对我不起作用。

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

如果您有更多事情要做,您不想调用 run_forever,因为它实际上会 运行 永远循环,即使在创建的任务完成后也是如此。

我无法测试这个,但你可以尝试这样的事情:

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