【发布时间】:2018-06-06 14:07:10
【问题描述】:
我正在做一些与出勤相关的项目。我在哪里使用 4x4 键盘和 LCD 显示器。所以问题是,如何从 4x4 矩阵键盘中读取多个数字? 我正在使用 pad4pi 库。我一次只能读取一个数字或数字。现在我想读一个像 1234 或 12345 这样的数字。你能帮帮我吗?
【问题讨论】:
标签: python raspberry-pi3 lcd keypad
我正在做一些与出勤相关的项目。我在哪里使用 4x4 键盘和 LCD 显示器。所以问题是,如何从 4x4 矩阵键盘中读取多个数字? 我正在使用 pad4pi 库。我一次只能读取一个数字或数字。现在我想读一个像 1234 或 12345 这样的数字。你能帮帮我吗?
【问题讨论】:
标签: python raspberry-pi3 lcd keypad
感谢您向我展示。该代码不会做任何事情。在注册键之后,您必须对存储的数据结构进行实际操作。
例如:
#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)
该代码将在按下 # 时打印内部数据结构。当然我假设传递的密钥是一个字符串,但我真的不知道我不熟悉这个库。
【讨论】:
我这样做了,但我还是卡住了
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()
但它什么也没做。
【讨论】:
这是我根据更改的代码。
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()
【讨论】:
可以通过使用数据结构来存储按下的值来促进存储键序列。然后在需要重置时清除它。
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)
【讨论】: