立即注册

micropython-microbit 中文社区

查看: 29|回复: 0

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

[复制链接]
  • TA的每日心情
    慵懒
    2019-10-23 20:05
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2019-10-20 11:24:19 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    HCSR04超声波传感器是通过测量脉冲宽度来计算距离的,因此可以使用PulseIn功能捕捉脉冲宽度。

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

    1. from microcontroller import pin, delay_us
    2. from time import monotonic
    3. from digitalio import DigitalInOut, Direction
    4. from pulseio import PulseIn

    5. class HCSR04():
    6.     def __init__(self, tp, ep, timeout = 0.1):
    7.         self.timeout = timeout
    8.         self.ep = PulseIn(ep)
    9.         self.ep.pause()
    10.         self.ep.clear()
    11.         self.tp = DigitalInOut(tp)
    12.         self.tp.direction = Direction.OUTPUT

    13.     def deinit(self):
    14.         self.ep.deinit()
    15.         self.tp.deinit()
    16.         
    17.     def distance(self):
    18.         self.tp.value = 1
    19.         delay_us(10)
    20.         self.tp.value = 0
    21.         self.ep.clear()
    22.         self.ep.resume()
    23.         ts = monotonic()
    24.         while not self.ep:
    25.             if monotonic() -ts > self.timeout:
    26.                 self.ep.pause()
    27.                 raise RuntimeError("Timed out")
    28.         self.ep.pause()
    29.         return self.ep[0]*0.017
    复制代码


    使用方法:

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

    2. while True:
    3.     dist = sr04.distance()
    4.     print(dist)
    5.     delay_us(500*1000)
    复制代码


    回复

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 立即注册

    Archiver|手机版|小黑屋|micropython-microbit 中文社区

    GMT+8, 2019-12-12 23:50 , Processed in 0.092870 second(s), 20 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表