我正在使用带有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()中的绿色按钮。并可能会添加更好的错误处理。
答案 0 :(得分:0)
您应该检查您的按钮连接和按钮位置,当您按下按钮时,它们如何改变其状态,例如从高变低,或从低变高,然后用万用表检查它们,有时焊料会引起问题。进行硬件控制后,您可以看到“ external link”,并且可以为项目使用其他输入功能。