如何停止重复按下/按住按钮- Python



我希望有人可能有一些见解如何阻止脚本继续重复,如果一个按钮被持有(或在我的情况下按超过一秒钟)?

基本上我有一个按钮设置在面包板上,我有它编码播放音频文件时,按下按钮。这是可行的,但是如果按钮没有被快速点击,那么音频将会重复,直到按钮被完全释放。另外,如果按下并按住该按钮,音频文件将无限重复。

如果有帮助的话,我已经录制了一个快速的录音来演示这个问题,在这里:https://streamable.com/esvoy6

我还应该注意到,我对python(实际上是一般的编码)非常陌生,所以很可能是一些我还没能找到的简单的东西。我使用gpiozero作为我的库。

任何帮助或见解是非常感谢!


这是我的代码现在的样子:

from gpiozero import LED, Button
import vlc
import time
import sys
def sleep_minute(minutes):
sleep(minutes * 60)

# GPIO Pins of Green LED
greenLight = LED(17)
greenButton = Button(27)

# Green Button Pressed Definition
def green_btn_pressed():
print("Green Button Pressed")
greenButton.when_pressed = greenLight.on
greenButton.when_released = greenLight.on
# Executed Script
while True:
if greenButton.is_pressed:
green_btn_pressed()
time.sleep(.1)
print("Game Audio Start")
p = vlc.MediaPlayer("/home/pi/Desktop/10 Second Countdown.mp3")
p.play()

所以从一个简短的看,似乎'time.sleep(.1)'没有做你所期望的。Ie。很明显,它被按钮打断了。这不是不正常的行为,因为按钮按在阿迪诺和raspPi(这里猜测)将被处理为中断。脚本本身不包含任何防止双击或按住等

当你按下按钮时,你有没有输入任何调试行来查看正在执行什么?我会从那里开始,根据你所看到的进行调整。

我不熟悉这个gpiozero,所以我不能给出任何关于它可能在做什么的见解,但是看看代码并给出你所遇到的问题,我会从两个函数中的一些调试行开始,以确认发生了什么。

考虑一下,你能不能把检查改成'if greenButton.is_released:'?这时你就知道按钮已经被按下了,它被保留的时间就变得无关紧要了。可能还需要检查文件是否已经在播放以停止它并重新开始,或者忽略并继续播放(如果这是期望的行为)。

进一步建议:

对于这段代码:

# Executed Script
while True:
if greenButton.is_pressed:
green_btn_pressed()
time.sleep(.1)
print("Game Audio Start")
p = vlc.MediaPlayer("/home/pi/Desktop/10 Second Countdown.mp3")
p.play()

你想把它改成这样:

alreadyPlaying = 0
# Executed Script
while True:
if greenButton.is_pressed:
green_btn_pressed()
#Check if already playing file.
if alreadyPlaying == 1:

# Do check to see if file is still playing (google this, not sure off the top of head how to do this easiest).
# If file still playing do nothing, 
#else set 'alreadyPlaying' back to '0'
break

#Check if already playing file.
if alreadyPlaying == 0:
time.sleep(.1)
print("Game Audio Start")
p = vlc.MediaPlayer("/home/pi/Desktop/10 Second Countdown.mp3")
p.play()
alreadyPlaying = 1

希望你能明白我在说什么。祝你好运!

我想你应该在你的循环中写这样的东西:

import time, vlc
def Sound(sound):
vlc_instance = vlc.Instance()
player = vlc_instance.media_player_new()
media = vlc_instance.media_new(sound)
player.set_media(media)
player.play()
time.sleep(1.5)
duration = player.get_length() / 1000
time.sleep(duration)

最新更新