GPIO按钮等待边缘仅在第一次工作

时间:2019-07-09 22:51:20

标签: python button error-handling raspberry-pi gpio

我正在使用带有2个按钮和OLED屏幕的树莓派进行用户交互。该代码在第一次使用时有效,但是一旦我给出“负”红色按钮答案,并尝试再次调用该方法,它就不再响应任何按钮按下,并且我无法中断代码(必须点击电源按钮),所以我知道我的错误处理也坏了。

我尝试过在getanswer()的末尾删除按钮事件,然后将它们再次添加到interact()中,但这还是行不通的。

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()中的绿色按钮。并可能会添加更好的错误处理。

1 个答案:

答案 0 :(得分:0)

您应该检查您的按钮连接和按钮位置,当您按下按钮时,它们如何改变其状态,例如从高变低,或从低变高,然后用万用表检查它们,有时焊料会引起问题。进行硬件控制后,您可以看到“ external link”,并且可以为项目使用其他输入功能。