分页: 1 / 1

【SAMR21新玩法】35. HCSR04超声波传感器

发表于 : 2019年 10月 25日 10:08
shaoziyang
HCSR04超声波传感器是通过测量脉冲宽度来计算距离的,因此可以使用PulseIn功能捕捉脉冲宽度。

下面是在adafruit_hcsr04.py程序基础上,精简的驱动程序:

代码: 全选

from microcontroller import pin, delay_us
from time import monotonic
from digitalio import DigitalInOut, Direction
from pulseio import PulseIn

class HCSR04():
    def __init__(self, tp, ep, timeout = 0.1):
        self.timeout = timeout
        self.ep = PulseIn(ep)
        self.ep.pause()
        self.ep.clear()
        self.tp = DigitalInOut(tp)
        self.tp.direction = Direction.OUTPUT

    def deinit(self):
        self.ep.deinit()
        self.tp.deinit()
        
    def distance(self):
        self.tp.value = 1
        delay_us(10)
        self.tp.value = 0
        self.ep.clear()
        self.ep.resume()
        ts = monotonic()
        while not self.ep:
            if monotonic() -ts > self.timeout:
                self.ep.pause()
                raise RuntimeError("Timed out")
        self.ep.pause()
        return self.ep[0]*0.017
使用方法:

代码: 全选

sr04 = HCSR04(pin.PA06, pin.PA07)

while True:
    dist = sr04.distance()
    print(dist)
    delay_us(500*1000)