我希望有人能對如何在按鈕被按住(或者在我的情況下按下超過一秒)時阻止腳本繼續重復的問題有一些見解?
基本上,我在面包板上設定了一個按鈕,我將其編碼為當按鈕被按下時播放一個音頻檔案。這很有效,但是如果不是非常快速地點擊按鈕,那么音頻將重復播放,直到按鈕被完全釋放。此外,如果按鈕被按住,音頻檔案將無限期地重復。
我已經錄制了一段快速錄音來演示這個問題,如果有幫助的話,請看這里。https://streamable.com/esvoy6
我還需要注意的是,我對Python非常陌生(實際上是一般的編碼),所以它很可能是一些簡單的東西,只是我還沒能找到。我正在使用 gpiozero 作為我的庫。
如果有任何幫助或見解,我們將不勝感激!
。以下是我的代碼現在的樣子:
from gpiozero import LED, Button
import vlc
import 時間
import sys
def sleep_minute(minutes)。
sleep(minutes * 60)
# 綠色LED的GPIO引腳。
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[/span]。
while True:
if greenButton.is_pressed:
green_btn_pressed()
time.sleep(.1)
print("游戲音頻開始")
p = vlc.MediaPlayer("/home/pi/Desktop/10 Second Countdown.mp3")
p.play()
uj5u.com熱心網友回復:
所以從簡單的觀察來看,'time.sleep(.1)'似乎沒有做你所期望的事情。也就是說,它顯然被按下的按鈕打斷了。這并不是不正常的行為,因為在Ardiuno和raspPi(這里猜測)上按下的按鈕會被當作中斷來處理。 腳本本身并不包含任何防止雙擊或按住等的措施。
你是否加入了任何除錯行來查看你按下按鈕時正在執行的內容? 我將從這里開始,并根據你所看到的情況進行調整。
我不熟悉這個 gpiozero,所以我不能對它可能正在做的事情提供任何見解,但看著代碼并考慮到你所遇到的問題,我將從兩個函式中的一些除錯行開始,以確認正在發生的事情。
想一想,你是否可以將檢查改為 "if greenButton.is_released:"?因為這樣你就知道按鈕已經被按下了,而它被按下的時間也就不重要了。您可能還想加入一個檢查,檢查檔案是否已經在播放,以停止它并再次啟動它,或者忽略并繼續播放(如果這是您想要的行為)。
進一步建議:
對于這部分的代碼:
# Executed Script。
while True:
if greenButton.is_pressed:
green_btn_pressed()
time.sleep(.1)
print("游戲音頻開始")
p = vlc.MediaPlayer("/home/pi/Desktop/10 Second Countdown.mp3")
p.play()
你想把它改成類似這樣的內容:
alreadyPlaying = 0。
# Executed Script[/span]。
while True:
if greenButton.is_pressed:
green_btn_pressed()
#檢查是否已經在播放檔案。
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
#檢查是否已經在播放檔案。
if alreadyPlaying == 0:
time.sleep(.1)
print("游戲音頻開始")
p = vlc.MediaPlayer("/home/pi/Desktop/10 Second Countdown.mp3" )
p.play()
alreadyPlaying = 1
希望你能理解我說的意思。祝您好運!
uj5u.com熱心網友回復:
我認為你必須在你的回圈中這樣寫:
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)
持續時間 = player.get_length() / 1000
time.sleep(duration)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/320716.html
標籤:
