我有一个程序运行镜头定时器以了解曝光时间,我需要能够根据 GPIO 输入的状态更新标签的颜色。如果我启动一个函数来检查 GPIO 状态,它不会继续执行其余代码。如何调用函数来检查 GPIO 输入而不冻结其余代码。有我可以改编的示例程序吗?
我调用了一个函数检查 GPIO,但是如果我为此使用线程,此调用会停止其余代码的运行
按要求添加功能 '''蟒蛇
def check_gpio(自身):
while (1):
GPIO.setup(2,GPIO.IN)
GPIO.setup(3,GPIO.IN)
if GPIO.input(2):
print ("gpio2 on")
else:
print ("gpio2 off")
if GPIO.input(3):
print ("gpio3 on")
else:
print ("gpio3 off")
optic_led_on = GPIO.input(2)
haptic_led_on = GPIO.input(3)
'''
我认为你应该将定义行放在循环之外。
GPIO.setup(2,GPIO.IN)
GPIO.setup(3,GPIO.IN)
你变得冻结,因为你正在调用一个有 while(1) 没有休息的函数。 您需要在此函数中添加一个中断。
例如:
def check_gpio(self):
while (1):
GPIO.setup(2,GPIO.IN)
GPIO.setup(3,GPIO.IN)
if GPIO.input(2):
print ("gpio2 on")
else:
print ("gpio2 off")
if GPIO.input(3):
print ("gpio3 on")
else:
print ("gpio3 off")
optic_led_on = GPIO.input(2)
haptic_led_on = GPIO.input(3)
break
但在这种情况下,没有理由使用 while。 我认为更好的方法是使用更通用的函数。例如:
def check_gpio(self, pin):
# Define GPIO as a input
GPIO.setup(pin, GPIO.IN)
# Verify GPIO value
gpio_on = GPIO.input(pin)
if gpio_on:
print (f"gpio{pin} on")
else:
print (f"gpio{pin} off")
# return the gpio value
return gpio_on
你可以这样调用这个函数:
optic_led_on = check_gpio(2)
haptic_led_on= check_gpio(3)