我们在手机、计算器、微波炉、门锁等上经常看到的那种键盘属于矩阵键盘,它们几乎无处不在。
然而,在DIY电子产品中,它们是让用户与您的项目交互的好方法,并且通常需要导航菜单、输入密码和控制机器人。
硬件概述 – 薄膜键盘 薄膜键盘(Membrane Keypad)由薄而柔韧的薄膜材料制成。它们的尺寸可能有4×3、4×4、4×1等。不管它们的尺寸如何,它们都以相同的方式工作。
它们的一大优点是它们带有背胶,因此您几乎可以将其连接到任何东西上。你只需要撕掉背面的纸。
我们以4×4键盘为例。它共有16个键。每个按键下方是一个特殊的薄膜开关。所有这些薄膜开关通过焊盘下方的导电线相互连接,形成4×4网格矩阵。
如果您使用了16个单独的按键,则需要17个输入引脚(每个按键一个,一个接地引脚)才能使它们工作。然而,使用矩阵排列,您只需要8个微控制器引脚(4列和4行)即可完成扫描按键。
4×3和4×4薄膜键盘的引脚排列 4×3和4×4薄膜键盘的引脚排列如下所示。
键盘如何工作以及如何扫描它们? 工作原理非常简单。按下按键可将其中一条行线与其中一条列线短路,从而允许电流在它们之间流动。例如,当按下键“4”时,第1列和第2行被短接。
微控制器可以扫描这些线路以查找按钮按下状态。为此,它遵循以下程序。 1. 微控制器将所有列和行线设置为输入。 2. 然后,它选择一行设置为输出,并将其设置为高电平。 3. 之后,它依次检查每一列线。 4. 如果列连接保持低电平,则未按下该列线上的按钮。 5. 如果它变为高电平,则微控制器知道哪一行设置为高电平,以及在检查时检测到哪一列为高电平。 6. 最后,它知道按下了对应于检测到的行和列的按钮。
使用Arduino连接4×3和4×4薄膜键盘 现在我们了解了有关薄膜键盘的所有信息,可以开始将它与Arduino连接起来。
连接非常简单。首先将键盘的引脚1连接到Arduino上的数字引脚9。现在继续向左连接引脚,如2与8、3与7等。
安装Keypad库 为了确定按下了哪个键,我们需要连续扫描行和列。幸运的是,Keypad.h可以隐藏这种不必要的复杂性,以便我们可以发出简单的命令来知道按下了哪个键。
要安装库,请导航到 Sketch > Include Library > Manage Libraries...等待库管理器下载库索引并更新已安装库的列表。
通过键入“keypad”过滤您的搜索。 应该有几个条目。 查找由Mark Stanley, Alexander Brevig制作的Keypad库。 单击该条目,然后选择安装。
Arduino代码 以下草图将让您全面了解如何使用4×3和4×4薄膜键盘检测按键,并可以作为更多实际实验和项目的基础。
4×3键盘代码 - #include <Keypad.h>
- const byte ROWS = 4; //four rows
- const byte COLS = 3; //three columns
- char keys[ROWS][COLS] = {
- {'1','2','3'},
- {'4','5','6'},
- {'7','8','9'},
- {'*','0','#'}
- };
- byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
- byte colPins[COLS] = {5, 4, 3}; //connect to the column pinouts of the keypad
- //Create an object of keypad
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- void setup(){
- Serial.begin(9600);
- }
-
- void loop(){
- char key = keypad.getKey();// Read the key
-
- // Print if key pressed
- if (key){
- Serial.print("Key Pressed : ");
- Serial.println(key);
- }
- }
复制代码
4×4键盘代码 - #include <Keypad.h>
- const byte ROWS = 4; //four rows
- const byte COLS = 4; //four columns
- char keys[ROWS][COLS] = {
- {'1','2','3','A'},
- {'4','5','6','B'},
- {'7','8','9','C'},
- {'*','0','#','D'}
- };
- byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
- byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
- //Create an object of keypad
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- void setup(){
- Serial.begin(9600);
- }
-
- void loop(){
- char key = keypad.getKey();// Read the key
-
- // Print if key pressed
- if (key){
- Serial.print("Key Pressed : ");
- Serial.println(key);
- }
- }
复制代码
这是串口监视器中输出的样子。
代码说明 该草图首先包含Keypad.h库并定义行数和列数。
接下来,我们定义一个二维键盘数组keys[ROWS][COLS],它保存在键盘上按下特定按钮时要打印的字符。
在我们的草图中,字符的布局与它们出现在键盘上的一样。但实际上你可以将这些定义为你想要的任何东西。例如,如果您打算创建一个计算器项目,您只需将数组定义更改为: - char keys[ROWS][COLS] = {
- {'1','2','3','4'},
- {'5','6','7','8'},
- {'9','0','+','-'},
- {'.','*','/','='}
- };
复制代码
接下来,我们创建一个keypad对象。构造函数Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS ) 接受五个参数。 ● makeKeymap(keys) 将内部键盘映射初始化为等于用户定义的键盘映射。 ● rowPins 和 colPins 是与键盘的行和列连接的arduino引脚号。 ● ROWS 和 COLS 是键盘的行数和列数。 一旦创建了keypad对象,我们可以发出一个简单的命令 getKey() 来检查按下了哪个按键。
键盘库中的其他有用函数 您可以将一些有用的函数与Keypad对象一起使用。下面列出了其中的几个: ● char waitForKey() 永远等待,直到有人按下一个键。它会阻止所有其他代码,直到按下某个键。这意味着没有闪烁的LED,没有LCD屏幕更新,除了中断程序之外什么都没有。 ● KeyState getState() 返回任何键的当前状态。四种状态是IDLE、PRESSED、RELEASED和HOLD。 ● boolean keyStateChanged() 让您知道按键何时从一种状态更改为另一种状态。例如,您可以测试何时按下某个键,而不仅仅是测试一个有效的键。 ● setHoldTime(unsigned int time) 设置用户必须按住按钮直到触发HOLD状态的毫秒数。 ● setDebounceTime(unsigned int time) 设置键盘在接受新的按键/按键事件之前将等待的毫秒数。 ● addEventListener(keypadEvent) 如果使用键盘,则触发事件。 |