我如何 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())
我已经无计可施了。我正在使用 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())