我已經開始使用Python和Raspberry Pi,並試圖使用它們進行一些物理計算。如何中斷while循環,運行函數並返回循環
我從那開始:https://www.raspberrypi.org/learning/physical-computing-with-python/,一切都很順利。
比我試圖玩弄紅綠燈(成功!): https://www.raspberrypi.org/learning/physical-computing-with-python/trafficlights/
這裏我的代碼:
from gpiozero import Button, TrafficLights
from time import sleep
lights = TrafficLights(25, 8, 7)
while True:
lights.green.on()
print("GREEN")
sleep(12)
lights.green.off()
lights.amber.on()
print("AMBER")
sleep(4)
lights.red.on()
lights.amber.off()
print("RED")
sleep(12)
lights.amber.on()
print("RED & AMBER")
sleep(4)
lights.red.off()
lights.amber.off()
比我嘗試添加一個按鈕,一個人行橫道。但在這裏我有問題。
下面的代碼:
from gpiozero import Button, TrafficLights
from time import sleep
button = Button(21)
lights = TrafficLights(25, 8, 7)
def pedestrian_crossing():
sleep(4)
lights.off()
lights.amber.on()
print("Pedestrian crossing: AMBER")
sleep(4)
lights.red.on()
lights.amber.off()
print("Pedestrian crossing: RED")
sleep(12)
lights.amber.on()
print("Pedestrian crossing: RED & AMBER")
sleep(4)
lights.red.off()
lights.amber.off()
button.when_pressed = pedestrian_crossing
while True:
lights.green.on()
print("GREEN")
sleep(12)
lights.green.off()
lights.amber.on()
print("AMBER")
sleep(4)
lights.red.on()
lights.amber.off()
print("RED")
sleep(12)
lights.amber.on()
print("RED & AMBER")
sleep(4)
lights.red.off()
lights.amber.off()
我試圖與button.wait_for_press
,button.wait_for_release
&有限,但button.is_pressed
是給我的最好成績之一。
問題是,當我按下按鈕時,函數被調用,但循環繼續。那麼我怎樣才能重寫代碼,而不是當我按下循環停止的按鈕時,函數被調用,函數內的所有內容都已完成,然後又回到循環?
還有另一種解決方案,與其他按鈕屬性?
在此先感謝!
謝謝您的回答@Skycc但更改'pedestrian_cross( )'在循環內部的綠燈後立即觸發按下按鈕。 –
我的錯誤,我檢查函數名稱,而不是var名稱,修復它,請再試一次 – Skycc
Hi @Skycc!現在如預期的那樣。我按下腳本運行的按鈕,直到「if」和人行橫道過程開始。但是當按下按鈕開始行人過路處時,是否有辦法立即中斷循環?正如你在按下按鈕時記住我的原始代碼那樣。唯一的問題是循環不停止。 ;-) 不管怎麼說,還是要謝謝你!!! –