0

我试图用一个按钮在树莓派上启动代码,一旦按下另一个按钮,我希望代码停止正在做的事情并转移到另一个功能。

当我试图立即打破这个循环时,我整天都在摸不着头脑:

# Import RPi GPIO module
from gpiozero import Button

#Assign name to buttons GPIO pins
button1 = Button(2)
button2 = Button(4)

def f1():
    while True:
        if button2.is_pressed:
            break
        input = float(input('Select grade: '))
        if input < 10:
            print('Less than 10')

def f2():
   while True:
        if button1.is_pressed:
            break
        input= float(input('Select grade: '))
        if input < 10:
            print('Less than 10')

while True:
    if button1.is_pressed:
    f1()
    elif button2.is_pressed:
    f2()

如果我将其设置input为:

serial = serial.Serial("/dev/ttyACM1",115200)
serial_value = serial.readline().decode('utf8').rstrip()
scale_input = float(serial_value)
input = scale_input

在这input两种情况下都可以正常工作并且代码运行良好,尽管它只会在我按住按钮直到serialinput()得到它们的值时才会中断,不幸的是这是不正确的,我需要杀死例如立即c1()切换到的函数,c2()无论是否代码是否已收到输入。

我试图玩一些线程,input在一个单独的函数上运行代码的“”部分并调用它,threading但是代码变得很糟糕。

我有一种感觉,线程是要走的路,但我不知道如何处理它,显然代码被卡在了input并且代码不会移动,直到收到一个值才不会使代码达到break之前input收到。

4

0 回答 0