这是我第一次在这个论坛上提问。如果发布此问题时出错,请提及。
我正在使用Python进行菜单功能。在代码中,我使用def来分类键盘和显示内容等功能。以下是代码:
#import
import RPi.GPIO as GPIO
import time
def main():
# Initialise display
lcd_init()
definition()
while True:
lcd_string("Press any key to",LCD_LINE_1)
lcd_string("continue",LCD_LINE_2)
keypad_init()
key_pad()
time.sleep(0.5)
menu_page()
key_pad1()
time.sleep(0.5)
def keypad_init():
for j in range(4):
GPIO.setup(col[j],GPIO.OUT)
GPIO.output(col[j],1)
for i in range(4):
GPIO.setup(row[i], GPIO.IN, pull_up_down = GPIO.PUD_UP)
def definition():
global row
row=[2,3,4,17]
global col
col=[27,22,10,9]
global MATRIX
MATRIX=[[1,2,3,'A'],
[4,5,6,'B'],
[7,8,9,'C'],
['Yes',0,'No','D']]
def key_pad():
# Keypad Function
while True:
for j in range(4):
GPIO.output(col[j],0)
for i in range(4):
if GPIO.input(row[i])==0:
return
while(GPIO.input(row[i])==0):
pass
GPIO.output(col[j],1)
def key_pad1():
# Keypad Function
global pagecount
while True:
for j in range(4):
GPIO.output(col[j],0)
for i in range(4):
if GPIO.input(row[i])==0:
pagecount = MATRIX[i][j]
return
while(GPIO.input(row[i])==0):
pass
GPIO.output(col[j],1)
def menu_page():
lcd_string("1.Diagnose",LCD_LINE_1)
lcd_string("2.BMI Calculator",LCD_LINE_2)
def option_choose():
if pagecount ==1:
lcd_string("Diagnose Start!",LCD_LINE_1)
lcd_string(" ",LCD_LINE_2)
if pagecount ==2:
lcd_string("BMI Calculate!",LCD_LINE_1)
lcd_string(" ",LCD_LINE_2)
def lcd_init():
# Initialise display
问题是程序没有停在key_pad()和key_pad1()。它只是继续循环并更改要显示的内容。我想显示"按任意键继续"直到按下一个键。请帮我解决这个问题。如果问题不明确,请说明。非常感谢你。 PS。我正在使用Raspberry Pi作为硬件部分
答案 0 :(得分:0)
您可以使用while True
方法,而不是使用GPIO.add_event_detect
循环来等待按键操作:
def keypad_init():
for j in range(4):
GPIO.setup(col[j],GPIO.OUT)
GPIO.output(col[j],1)
for i in range(4):
GPIO.setup(row[i], GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.add_event_detect(row[i], GPIO.BOTH, callback=keyPressed)
def keyPressed:
# Do your action here
您还可以使用GPIO.event_detected()
方法,具体取决于您要执行的操作。
看看https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/