我在这里机智。我正在使用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()对我不起作用。
任何帮助都将不胜感激。谢谢!
答案 0 :(得分:1)
如果您还有更多事情要做,您不想调用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())