|
Edited by 1723660543 at 2024-8-20 03:42 AM
OK, I have been fighting this for a few days. Finally, I realized that it was not me. The code for the Banana Pi is half-baked! I tried re-flashing, but their instructions were wrong. Was able to reflash with CircuitPython website. Then, lesson 04 Ultrasonic would hang. Now, I knew, the code was unreliable. Turned out the code was wrong! The Raspberry Pi code was totally different, and made perfect sense. So, I transferred the concepts into the Banana Pi code:
import time
import board
import pwmio
import time
import digitalio
class Ultrasonic():
# Define output(trig) and input(echo) pins.
def __init__(self):
#Define output(trig) and input(echo) Pin.
self._trig = digitalio.DigitalInOut(board.GP3)
self._trig.direction = digitalio.Direction.OUTPUT
self._trig.value = 0
self._echo = digitalio.DigitalInOut(board.GP2)
self._echo.direction = digitalio.Direction.INPUT
def get_distance(self):
self._trig.value = 1
time.sleep(0.000002)
self._trig.value = 0
# Wait for the echo pin to become high
while (self._echo.value) == False:
pass
# Record start time
start = time.monotonic_ns()
# Wait for the echo pin to lower
while self._echo.value == True:
pass
# End of record time
end = time.monotonic_ns()
# Calculate the duration of the pulse (nanosecond)
duration = end - start
# Distance (cm) calculated based on the speed of sound (343 m/s)
distance = ((duration / 2)/1000) * 0.0343
# Return distance value
return distance
if __name__ == '__main__':
ultrasonic = Ultrasonic()
while True:
value = ultrasonic.get_distance()
print("Distance: {:.2f}cm" .format(value))
time.sleep(1)
|
|