Files
mixly3/boards/default_src/micropython/origin/build/lib/sonar.py

40 lines
1.0 KiB
Python

"""
CS100/HC-SR04
Micropython library for the CS100/HC-SR04(Ultrasonic ranging)
=======================================================
@dahanzimin From the Mixly Team
"""
from time import sleep_us
from machine import Pin, time_pulse_us
class Sonar:
__species = {}
__first_init = True
def __new__(cls, trig, echo, *args, **kwargs):
if (trig, echo) not in cls.__species.keys():
cls.__first_init = True
cls.__species[(trig, echo) ] = object.__new__(cls)
return cls.__species[(trig, echo)]
def __init__(self, trig, echo, max_rang=400):
if self.__first_init:
self.__first_init = False
self.trig = Pin(trig, Pin.OUT, value=0)
self.echo = Pin(echo, Pin.IN)
self.timeout_us = int(max_rang * 2 * 29.1)
def checkdist(self):
self.trig.value(0)
sleep_us(5)
self.trig.value(1)
sleep_us(10)
self.trig.value(0)
try:
pulse_time = time_pulse_us(self.echo, 1, self.timeout_us)
pulse_time = pulse_time if pulse_time >= 0 else self.timeout_us
return round(pulse_time / 2 / 29.1, 2) # 1cm each 29.1us
except:
return None