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

问题描述 投票:1回答:1

我在黔驴技穷就在这里。我使用的是2个不同的传感器。当第一传感器被触发,我想闪烁黄色LED每秒钟一次。当第二传感器被触发,我想闪烁红色LED每秒两次。我能做到这一次一个,这是确定的,但我不能使这个过程重复(如,我将触发第一传感器和黄色LED模式会玩,但触发该传感器又没有效果。我不能触发其他传感器或者除非我关闭程序并重新启动。请注意下面的代码是在Micropython上ESP8266-12E。

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

我想为主板显示闪烁的红色LED时销9为高,然后显示闪烁的红色LED直到销9是低的。

我也喜欢板显示一个闪烁的黄色LED时引脚4为高,同样地,显示闪烁的黄色LED,直到销4是低的。

我想能够同时或独立地同时触发销9红色图案和销4黄色LED图案。

目前,我只能做一个或另一个。板等待来自任一销9或4的输入,这是很大的。当销9变高时,电路板正确显示红色LED闪烁图案。模式重复10次,这是很大的。但随后,该模式结束后,我不能再启动它,我也不能启动黄色的LED闪烁模式。如果我开始与黄色的图案,我不能重新启动黄色的图案,我无法启动红色图案。我不得不退出脚本,并重新开始。

循环Check_Button()不是为我工作。

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

asynchronous python-asyncio esp8266 micropython
1个回答
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())
© www.soinside.com 2019 - 2024. All rights reserved.