37 lines
1019 B
Python
37 lines
1019 B
Python
from microbit import *
|
|
|
|
|
|
def distance_mm(tpin=pin16, epin=pin15):
|
|
spi.init(baudrate=125000, sclk=pin13, mosi=tpin, miso=epin)
|
|
pre = 0
|
|
post = 0
|
|
k = -1
|
|
length = 500
|
|
resp = bytearray(length)
|
|
resp[0] = 0xFF
|
|
spi.write_readinto(resp, resp)
|
|
# find first non zero value
|
|
try:
|
|
i, value = next((ind, v) for ind, v in enumerate(resp) if v)
|
|
except StopIteration:
|
|
i = -1
|
|
if i > 0:
|
|
pre = bin(value).count("1")
|
|
# find first non full high value afterwards
|
|
try:
|
|
k, value = next(
|
|
(ind, v)
|
|
for ind, v in enumerate(resp[i : length - 2])
|
|
if resp[i + ind + 1] == 0
|
|
)
|
|
post = bin(value).count("1") if k else 0
|
|
k = k + i
|
|
except StopIteration:
|
|
i = -1
|
|
dist = -1 if i < 0 else round((pre + (k - i) * 8.0 + post) * 8 * 0.172)
|
|
return dist
|
|
|
|
|
|
def distance_cm(t_pin=pin16, e_pin=pin15):
|
|
return distance_mm(tpin=t_pin, epin=e_pin) / 10.0
|