GPIO按钮wait for edge只在第一个tim时起作用

2024-09-28 22:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个覆盆子圆周率与2个按钮和OLED屏幕的用户交互。这段代码第一次运行,但一旦我给出了一个“否定”的红色按钮答案,并试图再次调用该方法,它不再响应任何按钮按下,我无法突破代码(必须点击电源按钮),所以我知道我的错误处理也被打破。你知道吗

我尝试过删除getanswer()末尾的按钮事件,并在interaction()中再次添加它们,但也不起作用。你知道吗

import RPi.GPIO as GPIO

#button 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Set pin to be an input pin and set initial value to be pulled low (off)
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Set pin to be an input pin and set initial value to be pulled low (off)



def getanswer():
    GPIO.add_event_detect(19, GPIO.RISING, bouncetime=300)
    GPIO.add_event_detect(18, GPIO.RISING, bouncetime=300)
    while True:
        if GPIO.event_detected(19):
            print('yay')
            return 1
        if GPIO.event_detected(18):
            print('try again?')
            return 0
        time.sleep(.01)


def interaction():
    with canvas(device) as draw:
        draw.text((0, 0), 'Click the green', fill="white")
        draw.text((0, 12), 'button to begin!', fill="white")

    GPIO.wait_for_edge(19, GPIO.RISING, bouncetime=300)

    with canvas(device) as draw:
        draw.text((0, 0), 'ready?', fill="white")
    time.sleep(5)

    #dostuff

    with canvas(device) as draw:
        draw.rectangle((0,25,90,60), outline="white", fill=tup)
        draw.text((0, 0), 'Is this it?', fill="white")    

    ans = getanswer()
    if ans == 0:
        interaction()
    else:
        print('goodbye')


def main():
    interaction()


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        GPIO.cleanup()

我只想循环直到用户按下getanswer()中的绿色按钮。并可能添加更好的错误处理。你知道吗


Tags: totexteventgpioifdefaspin
1条回答
网友
1楼 · 发布于 2024-09-28 22:16:26

你应该检查你的按钮连接和按钮位置,当你按下按钮时,它们是如何改变它们的状态的,例如从高到低,或从低到高,并用万用表。有时焊料制造问题。在硬件控制之后,您可以查看“https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/”,并且可以为您的项目使用其他输入函数。你知道吗

相关问题 更多 >