【发布时间】:2015-12-10 18:16:06
【问题描述】:
我有一个运行 4 个 GPIO 输入端口的 PI。 目标是,如果按下 4 个按钮中的一个,则应该播放一个 mp3 文件,即 button1 = file1.mp3,button2 = file2.mp3 等等。 它似乎没有那么复杂,但是'魔鬼在细节中':-) 这是我目前 2 个按钮的代码:
#!/usr/bin/env python
#coding: utf8
import time
from time import sleep
import os
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
def my_callback_1(channel):
print("Button 23 Pressed")
os.system('omxplayer -o both /root/1.mp3')
sleep(10)
def my_callback_2(channel):
print("Button 24 Pressed")
os.system('omxplayer -o both /root/2.mp3')
sleep(10)
GPIO.add_event_detect(23, GPIO.RISING, callback=my_callback_1, bouncetime=200)
GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback_2, bouncetime=200)
try:
while 1:
time.sleep(0.5)
except KeyboardInterrupt:
# exits when you press CTRL+C
print(" Bye Bye")
except:
print("Other error or exception occurred!")
finally:
GPIO.cleanup() # this ensures a clean exit
睡眠时间设置为 mp3 文件中较长的时间。 它的工作,但不像我预期的那样。 问题是,当文件已经在播放时按下按钮时,PI 会将按钮按下保持在缓冲区中,并在当前文件之后循环播放文件。 想象一下,有人按下同一个按钮 5 次,同一个 mp3 文件将循环播放 5 次。
所以我在寻找这样的解决方案: 播放文件时,此时应“禁用”所有输入按钮。当mp3文件付费完成后,按钮应该是“重新启用”并且可以按下另一个按钮。
我怎么能这样?感谢您的帮助。
【问题讨论】:
-
“播放文件时,所有输入按钮都应该“禁用”” -- 这是用户的观点。在编程级别,输入不应或不能“禁用”。程序应该接受输入,并根据玩家的当前状态处理(或不处理)事件。该事件将被您的处理程序“禁用”或启用,忽略或处理每个事件。
标签: python-3.x raspberry-pi gpio