在树莓派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引脚上:

连接键盘到树莓派4
连接键盘到树莓派4

蓝色线连接对应行,橙色线连接对应的列。

代码示例

连接完成后,就可以运行一个简单的测试程序,将用户在键盘上按下的按钮打印到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方法将脉冲发送到单行,然后检查在将该行拉高时按下了哪个按钮。