【问题标题】:getting multiple inputs from a key pad in python从python中的键盘获取多个输入
【发布时间】:2017-05-24 19:08:58
【问题描述】:

我有一个树莓派,我需要使用 python 从 3x4 键盘获取 2 位数字。键盘工作正常,因为我可以得到一个数字,但我无法得到 2。

获取单数的代码为:

kp=keypad()
digit = None
while digit == None:
      digit = kp.getKey()

print digit

我目前的尝试:

kp=keypad()

digit = None
fin = ""
extra = ""
geb = ""
while digit == None:
      digit = kp.getKey()
      fin = digit
      extra = digit
      while fin == extra:
            digit = kp.getKey()
            geb = str(fin) + str(digit)
print geb

我需要能够获得 2 位数字,例如 12 或 56,但现在只能获得 1 位数字。

【问题讨论】:

  • 假设您的kp.getKey() 返回一个字符串,您始终可以将您的数字初始化为digit = "",然后使用while len(digit) < 2 for 循环并在其中使用digit += kp.getKey() 来收集数字。
  • 你有keypad.getKey的文档链接吗?
  • crumpspot.blogspot.ca/2013/05/… 这是我使用的代码。

标签: python raspberry-pi2 keypad


【解决方案1】:

查看您的原始代码,kp.getKey() 似乎偶尔会返回None。编写循环以追加到列表,直到它具有使用相同逻辑的两个元素:

lst = []
kp = keypad()
while len(list) < 2:
    digit = kp.getKey()
    if digit is not None:
        lst.append(digit)

print ''.join(lst)

【讨论】:

  • 这会将第一个数字附加两次。如果我按 1 我得到 11 并且没有第二个按钮按下。
  • @drako234。如果您必须自己过滤输入,那部分是有意义的,但是根据您链接到的代码 cmets,每次按键后通道都会重置。也许您需要在两次按下之间等待?
  • 如果您指的是 time.sleep() 不起作用。还有其他方法可以让它等待吗?似乎getKey()在按下按钮后并没有自行清除,我觉得我需要在返回后将rowVal和colVal重置为-1,但我认为我不能这样做?
  • ok 经过另一次测试,我发现当按下按钮时,getKey() 值将保持不变,直到按下另一个键并且程序不断读取它。 5 秒钟的睡眠没有任何作用。
  • 是的,在这种情况下睡眠无济于事。我对硬件端的了解并不多,所以我认为更好的方法可能是与博客的作者联系并询问他们的看法。他们看起来好像知道自己在做什么。
【解决方案2】:

好吧,我想通了:

kp = keypad()
list = ['']
digit = None
while True:
      digit = kp.getKey()
      if digit != None and digit != '*':
              list.append(str(digit))
              time.sleep(.5) #otherwise you end up repeating the same number until a new one is pressed 
              digit = None
     elif digit = '*':
              print ''.join(list)
              break

这将等到您按下 1 个或多个键,如果该键是 * 则它会打印您的号码并结束循环。

希望这可以帮助其他人解决这个问题。

【讨论】:

    猜你喜欢
    • 2012-07-13
    • 2013-07-06
    • 2011-10-19
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多