Микро Python - Микро: бит | Grove - Ultrasoni c Рейнджер | Создать драйвер для модуля - PullRequest
1 голос
/ 10 февраля 2020

Я пытаюсь перевести код python для Raspberry в MicroBit Micro Python для вождения Grove - Ultrasoni c Модуль рейнджера с Micro Python.

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

1 Ответ

1 голос
/ 11 февраля 2020

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

time.time() → float

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

Ваш код использует функцию time.ticks_us() Micro Python. От его помощи

utime.ticks_ms()

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

...

utime.ticks_us()

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...