1

我正在尝试将 Raspberry 的 python 代码转换为 MicroBit MicroPython,以使用 MicroPython 驱动 Grove - Ultrasonic 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我不知道为什么......谢谢你的帮助!

4

1 回答 1

1

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

time.time()→ 浮动

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

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

utime.ticks_ms()

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

...

utime.ticks_us()

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

因此,您在版本中获得的数字将比原始 Python 代码大 10^6 倍。看起来您已经将时间差乘以 10^6 以将其转换为微秒,因此只需从计算中删除此系数即可。

于 2020-02-11T14:46:42.377 回答