在循环中运行一次功能?

时间:2017-07-21 21:05:29

标签: python raspberry-pi

我正在建造一个带有超声波传感器,树莓派和蟒蛇的近地警告系统。我有一个检查距离的循环,并根据该距离我想要读取标注。

预期功能:显示在youtube视频中Boeing 737 cockpit landing(收听自动标注 - 对不起空中客车粉丝;)。

预期的功能说明: 达到高度后,播放一次mp3声音,但前提是距离越近,距离越远。

超声波传感器的Python代码:

#! /usr/bin/python
import RPi.GPIO as GPIO
import time

def checkdist():
    GPIO.output(16, GPIO.HIGH)
    time.sleep(0.000015)
    GPIO.output(16, GPIO.LOW)
    while not GPIO.input(18):
        pass
    t1 = time.time()
    while GPIO.input(18):
        pass
    t2 = time.time()
    return (t2-t1)*340/2

GPIO.setmode(GPIO.BOARD)
GPIO.setup(16,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(18,GPIO.IN)
time.sleep(2)
os.system('mpg123 -q PWSOnline.mp3 &')
try:
    while True:
        print('Distance: %0.2f m' %checkdist())
        time.sleep(0.1)
except KeyboardInterrupt:
    GPIO.cleanup()

我想做什么:

  • 超声波传感器距离值往往会跳跃 在更远的距离,所以某种方式来获得最后0.5的平均值 秒

  • 仅在距离越来越远的情况下播放标注 离开 - 所以我想它需要看到平均变化超过1秒(无论是减少还是增加)?

  • 播放一次标注。

问题:

  • 什么是触发功能一次的最佳方式 在循环内(并且没有主循环等待函数 完成 - 线程,右)?
  • 如何推断while循环中最后一秒的平均值?

0 个答案:

没有答案