MicroPython - Микро: бит | Grove - Ультразвуковой рейнджер | Создать драйвер для модуля

Я пытаюсь перевести код Python для Raspberry в MicroBit MicroPython для управления модулем Grove — Ultrasonic Ranger с MicroPython.

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, я не знаю, почему... Спасибо за вашу помощь!


person Guillaume Gence    schedule 10.02.2020    source источник


Ответы (1)


Код Seeed Studio измеряет время с помощью функции Python time.time(). Из справки:

time.time() → плавающий

Возвращает время в секундах с начала эпохи в виде числа с плавающей запятой.

В вашем коде используется функция MicroPython time.ticks_us(). Из справки:

utime.ticks_ms()

Возвращает увеличивающийся счетчик миллисекунд с произвольной точкой отсчета, который переходит после некоторого значения.

...

utime.ticks_us()

Точно так же, как ticks_ms() выше, но в микросекундах.

Таким образом, числа, которые вы получите в своей версии, будут в 10^6 раз больше, чем исходный код Python. Похоже, вы уже умножаете разницу во времени на 10^6, чтобы перевести ее в микросекунды, поэтому просто удалите этот коэффициент из своих расчетов.

person nekomatic    schedule 11.02.2020