Считайте несколько цифр с клавиатуры 4x4 с помощью raspberry pi 3 - PullRequest
0 голосов
/ 06 июня 2018

Я работаю над проектом, связанным с посещаемостью.Где я использую клавиатуру 4x4 и ЖК-дисплей.Итак, вопрос в том, как я могу прочитать более одной цифры с клавиатуры 4x4?Я использую библиотеку pad4pi.Где мне разрешено читать только одно число или цифру одновременно.Теперь я хочу прочитать число вроде 1234 или 12345. Не могли бы вы помочь мне.

Ответы [ 4 ]

0 голосов
/ 07 июня 2018

вот мой код в соответствии с изменениями.

from pad4pi import rpi_gpio
import time


# Setup Keypad
KEYPAD = [
        ["1","2","3","A"],
        ["4","5","6","B"],
        ["7","8","9","C"],
        ["*","0","#","D"]
]

# same as calling: factory.create_4_by_4_keypad, still we put here fyi:
ROW_PINS = [16, 20, 21, 5] # BCM numbering; Board numbering is: 7,8,10,11 (see pinout.xyz/)
COL_PINS = [6, 13, 19, 26] # BCM numbering; Board numbering is: 12,13,15,16 (see pinout.xyz/)

factory = rpi_gpio.KeypadFactory()

# Try keypad = factory.create_4_by_3_keypad() or 
# Try keypad = factory.create_4_by_4_keypad() #for reasonable defaults
# or define your own:
keypad = factory.create_keypad(keypad=KEYPAD, row_pins=ROW_PINS, col_pins=COL_PINS)


class KeyStore:
    def __init__(self):
        #list to store them
        self.pressed_keys =''

    #function to clear string
    def clear_keys(self):
        self.pressed_keys = self.pressed_keys.replace(self.pressed_keys,'')

    def store_key(self,key):
        if key=='#':
            #printing the sequence of keys.
            print(self.pressed_keys)
            self.clear_keys()
        else:
            self.pressed_keys += key

keys = KeyStore()

# store_key will be called each time a keypad button is pressed
keypad.registerKeyPressHandler(keys.store_key)


try:
    while(True):
        time.sleep(0.2)
except:
    keypad.cleanup()
0 голосов
/ 06 июня 2018

Я сделал это, но все еще застрял

from pad4pi import rpi_gpio
import time


# Setup Keypad
KEYPAD = [
        ["1","2","3","A"],
        ["4","5","6","B"],
        ["7","8","9","C"],
        ["*","0","#","D"]
]

# same as calling: factory.create_4_by_4_keypad, still we put here fyi:
ROW_PINS = [16, 20, 21, 5] # BCM numbering; Board numbering is: 7,8,10,11 (see pinout.xyz/)
COL_PINS = [6, 13, 19, 26] # BCM numbering; Board numbering is: 12,13,15,16 (see pinout.xyz/)

factory = rpi_gpio.KeypadFactory()

# Try keypad = factory.create_4_by_3_keypad() or 
# Try keypad = factory.create_4_by_4_keypad() #for reasonable defaults
# or define your own:
keypad = factory.create_keypad(keypad=KEYPAD, row_pins=ROW_PINS, col_pins=COL_PINS)


class KeyStore:
    def __init__(self):
        #list to store them
        self.pressed_keys =[]

    #function to add to list
    def store_key(self, key):
        self.pressed_keys.append(key)

    #function to clear list
    def clear_keys(self):
        self.pressed_keys.clear()

keys = KeyStore()

# store_key will be called each time a keypad button is pressed
keypad.registerKeyPressHandler(keys.store_key)
for key in keys.pressed_keys:
    print(key)

try:
    while(True):
        time.sleep(0.2)
except:
    keypad.cleanup()

Но ничего не происходит.

0 голосов
/ 06 июня 2018

Спасибо, что показали мне.Этот код не собирается ничего делать.Вы должны сделать что-то с сохраненной структурой данных после регистрации ключей.

Например:

#change store key function to do something on submission of a certain key that indicated send, will use pound for example.
def store_key(self,key):
     If(key==‘#’):
          #im printing but you should do whatever it is you intend to do with the sequence of keys. 
          print(self.pressed_keys)
     else:
          self.pressed_keys.append(key)

Этот код будет печатать внутреннюю структуру данных при нажатии #.Конечно, я предполагаю, что передаваемый ключ - это строка, но я не совсем знаю, что не знаком с библиотекой.

0 голосов
/ 06 июня 2018

Сохранение последовательности клавиш можно упростить, используя структуру данных для хранения нажатых значений.А затем очистить его, когда вам нужно сбросить.

class KeyStore:
    def __init__(self):
        #list to store them
        self.pressed_keys = []

    #function to add to list
   def store_key(self,key):
       if(key==‘#’):
      #im printing but you should do whatever it is you intend to do with the sequence of keys. 
      print(self.pressed_keys)
 else:
      self.pressed_keys.append(key)

    #function to clear list
    def clear_keys(self):
        self.pressed_keys.clear()

keys = KeyStore()

# store_key will be called each time a keypad button is pressed
keypad.registerKeyPressHandler(keys.store_key)
...