Arduino 4x4 矩阵键盘讲义
1. 概述
矩阵键盘是一种常见的输入设备,它通过行和列的交叉点来检测按键是否被按下。本讲义将指导你如何使用Arduino来控制一个4x4矩阵键盘。
2. 材料清单
- Arduino开发板(例如Arduino Uno)
- 4x4矩阵键盘模块
- 连接线
- 面包板(可选)
3. 准备工作
- 确保Arduino开发板已安装最新版本的Arduino IDE。
- 安装Keypad库,可以通过Arduino IDE的库管理器搜索并安装。
4. 连接键盘

上图中从左至右依次是:行1,行2,行3,行4,列1,列2,列3,列4,控制引脚
将4x4矩阵键盘的行和列引脚连接到Arduino开发板的相应数字引脚上。以下是示例连接:
- 键盘行1 -> Arduino 11
- 键盘行2 -> Arduino 10
- 键盘行3 -> Arduino 9
- 键盘行4 -> Arduino 8
- 键盘列1 -> Arduino 7
- 键盘列2 -> Arduino 6
- 键盘列3 -> Arduino 5
- 键盘列4 -> Arduino 4
5. 编写代码
以下是用于控制4x4矩阵键盘的Arduino代码示例:
#include <Key.h>
#include <Keypad.h>
const byte rows = 4; // 键盘的行数
const byte cols = 4; // 键盘的列数
// 定义键盘按键布局
char key[rows][cols] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'=','0','.','/'}
};
// 定义行和列的引脚
byte rowPin[rows] = {11,10,9,8};//行
byte colPin[cols] = {7,6,5,4};//列
// 初始化Keypad对象
Keypad k = Keypad(makeKeymap(key), rowPin, colPin, rows, cols);
void setup() {
// 初始化串行通信
Serial.begin(9600);
}
void loop() {
// 检测按键是否被按下
char keys = k.getKey();
if(keys) {
// 如果按键被按下,打印按键值
Serial.println(keys);
}
// 延迟200毫秒,防止抖动
delay(200);
}
6. 代码解析
6.1 包含库
#include <Key.h>
#include <Keypad.h>
这两行代码是预处理指令,它们告诉编译器在编译过程中包含Keypad库的头文件。Key.h和Keypad.h是Keypad库的两个主要文件,提供了创建和操作矩阵键盘所需的函数和定义。
6.2 定义常量
const byte rows = 4; // 键盘的行数
const byte cols = 4; // 键盘的列数
这里定义了两个常量rows
和cols
,分别代表键盘的行数和列数。在本例中,键盘是4x4的,所以两个常量都被设置为4。
6.3 定义键盘布局
char key[rows][cols] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'=','0','.','/'}
};
这是一个二维字符数组,定义了键盘上每个按键对应的字符。数组的每一行对应键盘的一行,每一列对应键盘的一列。例如,第一行第一列的按键对应字符'1'。
6.4 定义引脚
byte rowPin[rows] = {11,10,9,8};
byte colPin[cols] = {7,6,5,4};
这里定义了两个数组rowPin
和colPin
,分别存储连接到键盘行和列的Arduino引脚编号。这些引脚将用于检测按键是否被按下。
6.5 初始化Keypad对象
Keypad k = Keypad(makeKeymap(key), rowPin, colPin, rows, cols);
这行代码创建了一个Keypad对象k
,它是使用Keypad库来控制键盘的核心。makeKeymap(key)
函数将key
数组转换为Keypad库所需的格式。rowPin
、colPin
、rows
和cols
分别传递给Keypad对象,以初始化键盘布局和引脚配置。
6.6 setup()
函数
void setup() {
Serial.begin(9600);
}
setup()
函数是Arduino程序的入口点,它在程序开始运行时执行一次。这里,它设置了串行通信的波特率,这里是9600波特率,用于与计算机通信。
6.7 loop()
函数
void loop() {
char keys = k.getKey();
if(keys) {
Serial.println(keys);
}
delay(200);
}
loop()
函数是Arduino程序的主要循环,它将不断重复执行。在本例中:
char keys = k.getKey();
:调用Keypad对象的getKey()
方法来检测是否有按键被按下,并存储按下的按键字符。
if(keys) { ... }
:如果检测到按键(即keys
不为0),则执行大括号内的代码。
Serial.println(keys);
:将按下的按键字符通过串行端口打印出来,这样可以通过Arduino IDE的串行监视器看到按键输入。
delay(200);
:在每次循环结束时添加200毫秒的延迟,以避免按键抖动或误触发。
7. 测试
- 将编写好的代码上传到Arduino开发板。
- 打开Arduino IDE的串行监视器,设置波特率与代码中的设置相匹配。
- 按下键盘上的任意键,观察串行监视器输出的按键值。
8. 扩展
- 你可以修改
key
数组来自定义键盘的按键布局。
- 可以添加更多的功能,例如按键长按检测、组合键等。
9. 注意事项
- 确保所有连接都已正确焊接或插接。
- 在修改代码之前,确保理解每一部分的功能。