Python: 几秒钟后从 True 变为 False 的布尔值

Python: Make a boolean change from True to False after a few seconds

我有这段代码正在为篮球比赛(一种街机风格的篮球比赛,使用振动传感器和 HC-SR04 检测篮板击球和得分)。我正在尝试弄清楚如何在几秒钟后将全局布尔值从 True 更改为 False。

因此,例如,球击中篮板 - 将 gobal 篮板设置为 True - 从那里它会保持 True 几秒钟,以查看球是否从篮板弹回球网。如果球过网时篮板变量仍然为真,那么它就会知道这是一次篮板外射门,并且可以播放其他一些很酷的东西的特殊音效。

现在在回调函数中,当球击中篮板时,backboard 变量设置为 True,但它只会保持 True 直到玩家得分,而不是在几秒钟后变回 false。

代码如下:

import RPi.GPIO as GPIO
from gpiozero import DistanceSensor
import pygame
import time

ultrasonic = DistanceSensor(echo=17, trigger=4)
ultrasonic.threshold_distance = 0.3
pygame.init()

#Global
backboard = False

#GPIO SETUP

channel = 22

GPIO.setmode(GPIO.BCM)

GPIO.setup(channel, GPIO.IN)

#music
score = pygame.mixer.Sound('net.wav')
bb = pygame.mixer.Sound("back.wav")

def scored():
        #the ball went through the net and trigged the HC-SR04
        global backboard
        if backboard == True:
                print("scored")
                backboard = False
                score.play()
                time.sleep(0.75)
        else:
                print("scored")  
                score.play()
                time.sleep(0.75)              

def callback(channel):
        #the ball hit the backboard and triggered the vibration sensor
        global backboard
        if GPIO.input(channel):
                backboard = True
                print("backboard")
                bb.play()
                time.sleep(0.75)


GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)  # let us know when the pin goes HIGH or LOW
GPIO.add_event_callback(channel, callback)  # assign function to GPIO PIN, Run function on change
ultrasonic.when_in_range = scored

我建议简单地实现一个计时器对象。尝试执行此操作:

from threading import Timer
import time

def switchbool():
    backboard = false

t = Timer(3.0, switchbool) #will call the switchbool function after 3 seconds
t.start()

每当球击中篮板时(每当您设置 backboard = true 时),只需像上例中的那样创建一个计时器对象。