私は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
は私に最良の結果を与えたものでした。
ボタンを押したときに関数が呼び出されても、ループが継続するという問題があります。では、コードを書き直すにはどうすればいいですか?ボタンを押すとループが停止し、関数が呼び出され、関数内のすべてが実行され、ループに戻ります。
他のボタン属性を持つ別の解決策がありますか?
ありがとうございます!
はmy_sleep機能でpedestrian_pressのVARのためにチェックを入れます) 'はループの内側の緑色のライトの後に即座にトリガーされますボタンを押してください。 –
私の間違いは、var名の代わりに関数名を確認して、修正してください。もう一度やり直してください – Skycc
こんにちは@Skycc!今のところ期待通りです。 'if'と歩行者横断プロセスが始まるまでスクリプトを実行するボタンを押します。しかし、ボタンを押して歩行者の横断を開始するとすぐにループを中断する方法はありますか?ボタンを押したときに元のコードで覚えているように、それが発生します。唯一の問題は、ループが止まらないことです。 ;-) とにかくありがとう!!! –