Raspberry PI GPIO 输入和 GUI

问题描述 投票:0回答:1

我有一个程序运行镜头定时器以了解曝光时间,我需要能够根据 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)

'''

python user-interface gpio
1个回答
-1
投票

我认为你应该将定义行放在循环之外。

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)
© www.soinside.com 2019 - 2024. All rights reserved.