我正在尝试创建一个可以感知洗衣机开启的应用程序。然后,当它完成后,我希望它检测到并闪现我的Hue灯泡。我正在为这个项目使用SW-420振动传感器和Python。我已经成功地认识到振动,但不幸的是,这不是我需要的。以下是我目前的代码。
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import subprocess
#GPIO SETUP
channel = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(channel, GPIO.IN)
def start(channel):
if GPIO.input(channel):
print "Dryer has started!"
time.sleep(1)
else:
print "Dryer has stopped"
time.sleep(1)
#f = open("status", "w") #Used to create light status file
#subprocess.call(["perl", "/home/pi/huepi/huepi", "lights"], stdout=f); # creates status file
#subprocess.call(["perl", "/home/pi/huepi/huepi", "for", "1 3 4 5 6 10 11 12", "do", "blinkonce"]); # blinks hue bulbs
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300) # let us know when the pin goes HIGH or LOW
GPIO.add_event_callback(channel, start) # assign function to GPIO PIN, Run function on change
# infinite loop
while True:
time.sleep(1)
我遇到的问题是即使机器运行传感器寄存器已停止。我尝试过使用
GPIO.add_event_detect(channel, GPIO.RISING, bouncetime=300)
和
GPIO.add_event_detect(channel, GPIO.FALLING, bouncetime=300)
两者都有相同的结果。我只是需要它来注册机器已启动然后停止闪烁Hue灯泡并等待下次机器开始备份。
我正在使用一个名为Huepl的Perl库来连接但是灯泡代码的这一部分工作正常。如果您需要更多信息,我将很乐意提供。先感谢您!
答案 0 :(得分:0)
在第一次检测到振动时通过回调设置started
。每当检测到振动时,都会通过回调设置lastShakeTime
。
在主循环中检查是否在60秒内未检测到任何内容:
import datetime
# infinite loop
while True:
time.sleep(1)
now = datetime.datetime.now()
if started and (now - lastShakeTime).total_seconds() > 60:
# do something with your oleds
轮询与基于事件的关系: https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/