我正在尝试将树莓派的python代码翻译成MicroBit MicroPython,以便用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有很大的价值,我不知道为什么……感谢您的帮助!
发布于 2020-02-11 22:46:42
Seeed Studio代码使用Python的time.time()函数进行计时。来自the help
time.time()→float
以浮点数的形式返回自纪元以来的时间(秒)。
您的代码使用MicroPython的time.ticks_us()函数。来自its help
utime.ticks_ms()
返回一个带有任意参考点的递增毫秒计数器,该计数器在某个值之后环绕。
..。
utime.ticks_us()
就像上面的ticks_ms()一样,但以微秒为单位。
因此,在您的版本中获得的数字将是原始Python代码的10^6倍。看起来您已经将时间差乘以10^6,以将它们转换为微秒,所以只需从计算中删除此系数。
https://stackoverflow.com/questions/60158099
复制相似问题