在树莓派4上使用键盘模块
下图是常见的键盘模块,这是一款包含数字0到9和字母A-D,同时还包含*号和#号键的16键键盘模块。通过它用户可以通过多种方式在树莓派上输入数据,当然它也支持在Arduino上使用,请查阅使用Arduino和LCD1602制作计算器。如下图:

4*4薄膜矩阵形键盘单片机外y扩外接控制键盘4x4按键模块 轻触开关 【在售价】14.70 元 ----------------- 【立即下单】点击链接立即下单:https://s.click.taobao.com/3eivisv
在本文中,我们将讨论这款键盘是如何工作的,以及如何将它轻松地整合到树莓派4的项目中。
键盘模块
键盘的布局可以分成四行四列:

在项目中,当树莓派需要检测某个按键是否被按下时,就必须向键盘的四行各发送一个高电平脉冲。当用户按下某个按键时,树莓派接收并定位到当前被拉高的行键的位置,则相应的列的电平也被拉高。此时,树莓派通过对行和列的组合进行解码,就可以确定具体按下了哪个按钮。例如,如果用户按下位于第四列第二行的B按钮,Raspberry Pi会检测到这个按钮,然后再去检测这四列中哪一列被拉高了,通过此方式确定用户按下了B键。
连接键盘到树莓派4
这个键盘模块不需要任何电源就可以工作。我们可以将键盘上的所有8条数据线连接到树莓派上的任意8个GPIO引脚上:

蓝色线连接对应行,橙色线连接对应的列。
代码示例
连接完成后,就可以运行一个简单的测试程序,将用户在键盘上按下的按钮打印到Raspberry Pi的控制台:
import RPi.GPIO as GPIO import time L1 = 5 L2 = 6 L3 = 13 L4 = 19 C1 = 12 C2 = 16 C3 = 20 C4 = 21 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(L1, GPIO.OUT) GPIO.setup(L2, GPIO.OUT) GPIO.setup(L3, GPIO.OUT) GPIO.setup(L4, GPIO.OUT) GPIO.setup(C1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(C2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(C3, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(C4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) def readLine(line, characters): GPIO.output(line, GPIO.HIGH) if(GPIO.input(C1) == 1): print(characters[0]) if(GPIO.input(C2) == 1): print(characters[1]) if(GPIO.input(C3) == 1): print(characters[2]) if(GPIO.input(C4) == 1): print(characters[3]) GPIO.output(line, GPIO.LOW) try: while True: readLine(L1, ["1","2","3","A"]) readLine(L2, ["4","5","6","B"]) readLine(L3, ["7","8","9","C"]) readLine(L4, ["*","0","#","D"]) time.sleep(0.1) except KeyboardInterrupt: print("\nApplication stopped!")
可以看到,测试程序包含一个名为readLine的方法。readLine方法将脉冲发送到单行,然后检查在将该行拉高时按下了哪个按钮。