Кнопка GPIO «Ждать края» работает только в первый раз - PullRequest
0 голосов
/ 10 июля 2019

Я использую Raspberry Pi с 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 (). И, возможно, добавьте лучшую обработку ошибок.

1 Ответ

0 голосов
/ 14 июля 2019

Вам следует проверять соединения кнопок и возможности кнопок, когда вы нажимаете кнопку, как они меняют свое состояние, например, с высокого на низкое или с низкого на высокое и проверяют их с помощью мультиметра. Иногда припой создает проблемы. После аппаратного контроля вы можете посмотреть "https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/" и использовать другую функцию ввода для вашего проекта.

...