我在树莓派上有一些 python 代码,我想运行并继续循环,直到按下按钮。
button.wait_for_press() 不适合,因为它会暂停程序直到它运行,但我已经尝试过,看看硬件是否正常工作。
def shutterPressed():
global shutterHasBeenPressed
shutterHasBeenPressed = True
def main():
"""
Main program loop
"""
#start camera preview
camera.start_preview(resolution=(SCREEN_W, SCREEN_H))
#Display Intro screens
intro_image_1 = REAL_PATH + '/assets/intro_1.png'
intro_image_2 = REAL_PATH + '/assets/intro_2.png'
overlay_1 = overlay_image(intro_image_1, 0, 3)
overlay_2 = overlay_image(intro_image_2, 0, 4)
#Wait for button press
i = 0
blink_speed = 10
button.when_pressed = shutterPressed
while True:
global shutterHasBeenPressed
shutterHasBeenPressed = False
#Stay in loop until button is pressed
if shutterHasBeenPressed is False:
i += 1
if i == blink_speed:
overlay_2.alpha = 255
elif i == (2 * blink_speed):
overlay_2.alpha = 0
i = 0
#Restart while loop
sleep(0.1)
continue
#button has been pressed!
print("Button Pressed!")
当我运行此代码时,按钮按下根本没有注册。
我做错了什么?
编辑:所以我在 shutterPressed() 函数中添加了一个打印语句,并确认它在按下按钮时正在运行。
In 还添加了一条语句,用于在 if 语句之前打印 shutterHasBeenPressed 的值。这从未改变过虚假。
但是,如果我在循环开始时删除了将变量更改为 false 的行,那么代码就可以工作,因此显然与运行各种位时有关。也许在 shutterPressed() 函数运行后,while 循环会再次启动?
无论哪种方式,我都通过将变量的重新分配移动到 if 语句之后来修复它。