我希望有人可以帮助我解决这个问题。我希望修复起来相当简单,但我已经尝试了一段时间来解决这个问题。我已将较大的代码修剪为此,因为我相信这里的问题是问题的症结所在。
我有一个树莓派和一个外部按钮。这是在 Linux 上的 python3 上。我正在使用 GPIOZero 作为按钮。我相信下面的代码很容易理解,但基本上,我希望函数始终循环。当我按下一个按钮时,我希望另一个函数运行,但前提是变量是某个数字。我在下面的评论中描述了我最终想要发生的事情,但是我的代码未完成并且仅针对这个问题进行了简化。
我只想button.when_pressed
在timer = 0
. 问题是,一旦代码自然地进入button.when_pressed
函数,它就再也不会“放开”函数了。当我成功将变量重新定义为时,当我按下按钮时timer = 1
,它仍然打印按钮被按下。我不知道为什么。对我来说,它似乎应该只工作一次timer = 0
。
有什么建议么?我想我对我将计划研究的全局变量有误解。我不确定这是否是问题所在。我也尝试过使用break
并continue
试图让它“回到它的循环”,但这也没有奏效。我也想使用button.when_pressed
而不是btn.is_pressed
,因为我希望程序仅在我按住按钮一次时执行某些操作,而不是在按住按钮时循环。在这种情况下,我希望按下按钮以打印一次。如果我这样做btn.is_pressed
了,它将每两秒按下一次打印按钮,这是我不想要的。
谢谢你的帮助。我很高兴学习。
#!/usr/bin/python3
from gpiozero import Button
from time import sleep
import time
button = Button(4)
timer = 0
def press():
print("Button is pressed")
global timer
timer = 1
def loop():
global timer
timer = 1
while True:
if timer == 0:
button.when_pressed = press
else:
loop()
sleep(2)