该程序不会停留在Python

时间:2016-11-27 14:22:23

标签: python

这是我第一次在这个论坛上提问。如果发布此问题时出错,请提及。

我正在使用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作为硬件部分

1 个答案:

答案 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/