MicroPython - Micro:bit |格罗夫 - 超声波护林器 |为模块创建驱动程序



我正在尝试将Raspberry的python代码转换为MicroBit MicroPython,以便使用MicroPython驱动Grove - Ultrasound Ranger模块。

http://wiki.seeedstudio.com/Grove-Ultrasonic_Ranger/

https://github.com/Seeed-Studio/grove.py/blob/master/grove/grove_ultrasonic_ranger.py

我这样做了,语法还可以:

from microbit import *
import time

_TIMEOUT1 = 1000
_TIMEOUT2 = 10000

def _get_distance():
pin0.write_digital(0)
time.sleep_us(2)
pin0.write_digital(1)
time.sleep_us(10)
pin0.write_digital(0)

t0 = time.ticks_us()
count = 0
while count < _TIMEOUT1:
if pin0.read_digital():
display.set_pixel(1, 1, 5)
break
count += 1
if count >= _TIMEOUT1:
return None
t1 = time.ticks_us()
count = 0
while count < _TIMEOUT2:
if not pin0.read_digital():
display.set_pixel(0, 0, 5)
break
count += 1
if count >= _TIMEOUT2:
return None
t2 = time.ticks_us()

dt = int(time.ticks_diff(t1,t0) * 1000000)
# The problem is upside !

if dt > 530:
return  None
distance = (time.ticks_diff(t2,t1) * 1000000 / 29 / 2)    # cm

return distance

def get_distance():
while True:
dist = _get_distance()
if dist:
return dist
#Appel de la fonction get_distance(void) et affichage sur le display
display.scroll(get_distance())

但是我对dt有很大的价值,我不知道为什么...... 感谢您的帮助!

Seeed Studio 代码使用 Python 的time.time()函数进行计时。从帮助:

time.time()→浮子

返回自纪元以来的时间(以秒为单位(作为浮点数。

你的代码使用MicroPython的time.ticks_us()函数。从它的帮助:

utime.ticks_ms()

返回一个递增的毫秒计数器,该计数器具有任意参考点,该参考点在某个值之后环绕。

utime.ticks_us()

就像上面的ticks_ms((一样,但以微秒为单位。

因此,您在版本中获得的数字将比原始 Python 代码大 10^6 倍。看起来好像你已经将时间差乘以 10^6 将它们变成微秒,所以只需从计算中删除这个系数。

要使用MicroPython运行超声波Ranger模块,您可以使用此库。 我将距离函数模块化为模块。因此,您可以导入它并调用距离函数,如下例所示:

from microbit import *
from ultrasonic import Ultrasonic
# default pins in Ultrasonic library are:
# trigger: pin13
# echo: pin15
ultrasonic_sensor = Ultrasonic()
# or
# ultrasonic_sensor = Ultrasonic(trig=pin13, echo=pin15)
while True:
distance_value = ultrasonic_sensor.measure_distance_cm()
display.scroll(str(int(distance_value)))
sleep(2000)

我已经在micro:bit v2上用Elecrow的超声波模块和他们的Microbit的Crowtail-Base Shield进行了测试。

最新更新