|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我打算做个自动巡线的小车,加一个ws2812灯带。
我用树莓派pico(单片机),其中先写了一个程序是控制ws2812灯带的效果,其中使用到了while,以达到让灯好像霹雳游侠车一样,前脸一排灯来回扫描
如下
from machine
from machine import Pin
LED1=Pin(1,machine.Pin.OUT)
import time
import neopixel
led=neopixel.NeoPixel(LED1,8)
while 1:
for i in range(8):
led[i]=(255,0,0)
led.write()
time.sleep(0.05)
led[i-1]=(0,0,0)
led.write()
time.sleep(0.1)
for c in range(6,-1,-1):
led[c]=(255,0,0)
led.write()
time.sleep(0.05)
led[c+1]=(0,0,0)
led.write()
time.sleep(0.1)
-----------------------------------
但是为了让小车检测到障碍就转向,我还得设置另一个while循环。
import machine
import time
from machine import Pin,PWM
gp16 = machine.Pin(16,machine.Pin.OUT)
gp17 = machine.Pin(17,machine.Pin.OUT)
pwm15=machine.PWM(Pin(15), freq=10000, duty_u16=65535)
cc = machine.Pin(0,machine.Pin.IN) #光线传感器
while 1:
ccc=cc.value()
if ccc == 0:
#pwm16.duty_u16(1000)
gp16.high()
gp17.low()
else:
#pwm16.duty_u16(1000)
gp16.low()
gp17.low()
----------------
我现在想让小车的灯程序一直运行的同时,也可以自动避障,让2个循环互不干预,可是我不知道该如何实现,哪位大哥帮忙解答下。
总不会需要2个树莓派pico吧。
很抱歉,Micropython并不直接支持`threading`库。不过,你可以使用`uasyncio`库来实现类似的功能。 `uasyncio` 是一个针对MicroPython的异步IO库,它可以帮助你编写协程和实现简单的多任务。下面是一个使用`uasyncio`的示例代码,可以同时控制灯带和小车运动:
- import uasyncio as asyncio
- from machine import Pin
- # 创建引脚对象
- LED1 = Pin(1, Pin.OUT)
- gp16 = Pin(16, Pin.OUT)
- gp17 = Pin(17, Pin.OUT)
- # 控制灯带的协程
- async def control_led():
- while True:
- for i in range(8):
- LED1.on()
- await asyncio.sleep(0.05)
- LED1.off()
- await asyncio.sleep(0.1)
- for c in range(6, -1, -1):
- LED1.on()
- await asyncio.sleep(0.05)
- LED1.off()
- await asyncio.sleep(0.1)
- # 控制小车运动的协程
- async def control_car():
- cc = Pin(0, Pin.IN)
- while True:
- ccc = cc.value()
- if ccc == 0:
- gp16.on()
- gp17.off()
- else:
- gp16.off()
- gp17.off()
- await asyncio.sleep_ms(100) # 等待100毫秒
- # 创建事件循环
- loop = asyncio.get_event_loop()
- # 启动协程任务
- loop.create_task(control_led())
- loop.create_task(control_car())
- # 执行事件循环
- loop.run_forever()
复制代码
在这个示例代码中,我们使用`uasyncio`库来创建两个协程函数`control_led()`和`control_car()`。这两个协程函数分别控制了灯带和小车运动的行为。然后,我们通过`loop.create_task()`方法将这两个协程任务添加到事件循环中。最后,调用`loop.run_forever()`方法来执行事件循环,使得两个协程能够同时运行。
综上所述,使用`uasyncio`库可以实现类似多线程的效果。希望对你有所帮助!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|