
首先必须安装Arduino Keypad键盘库(Keypad library),Arduino Keypad键盘库可以从Arduino Playground下载。Arduino Keypad键盘库让你读取矩阵式键盘而不用编写复杂的代码,此键盘库可以读取3x4, 4x4以及各种矩阵结构的键盘。
- 该键盘库是属于无阻塞式,按下谋键不放,其余(接下来)的代码还是会继续运行
- 如果编写控制键盘处运用到delay(),这将造成键盘反应迟顿
- 按下谋键,getKey()只返回一个键值,而不是自动重复。松开按键时,可以追踪其RELEASED event
- 下载Arduino Keypad键盘库
- 将下载了的文件(keypad.zip)解压至Arduino软件的libraries文件夹,如图

- 打开Arduino软件
- 选择File>Examples>Keypad,将会看见以下画面,表示Arduino Keypad键盘库安装成功

根据下面接线连接键盘至Arduino

Arduino
|
4x4 Keypad
|
D2
|
1
|
D3
|
2
|
D4
|
3
|
D5
|
4
|
D6
|
5
|
D7
|
6
|
D8
|
7
|
D9
|
8
|
#include <Keypad.h> const byte ROWS = 4; // Four rows //Define the keymap //// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. // Connect keypad COL0, COL1, COL2 and COL3 to these Arduino pins. // Create the Keypad void setup(){ void loop(){ if (key != NO_KEY){ |
使用Arduino软件自带的串口监视器(Serial Monitor)来测试此程序(Baud rate必须设成9600)。当按下谋键时,其返回值将显示在串口监视器。
- 下载Arduino PS2键盘库
- 将下载了的文件(PS2keyboard.zip)解压至Arduino软件的libraries文件夹
- 安装方法与安装keypad相似,请参考之。
根据下面接线连接键盘至Arduino

Keyboard
|
Arduino
|
4 (+5V)
|
5V
|
3 (GND)
|
GND |
5 (Clock)
|
Digital Pin 3
|
1 (Datak)
|
Digital Pin 4
|
#include <PS2Keyboard.h> const int DataPin = 8; PS2Keyboard keyboard; void setup() { void loop() { |
增加按键音效
按照下面图象连接PC扬声器(此PC扬声器可以从废棄的电脑主板拆岀来),然後稍微更改代码。由于没有此PC扬声器的规格说明,估计供电5V且功率非常小,能够直接由Arduino驱动。如果不放心,可以在Aruino pin10与扬声器之间添加一个100欧姆电阻器。
代码方面使用了tone()函数,具体可以浏览Arduino Reference网站
http://arduino.cc/en/Reference/Tone
tone()用法
- tone(pin, frequency)
- tone(pin, frequency, duration)
- pin是连接扬声器的引脚
- frequency是输出频率,频率越低,音频就越低。
- duration音频输出持续时间
#include <Keypad.h> const byte ROWS = 4; // Four rows const byte COLS = 4; // Four columns //Define the keymap char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; //// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte rowPins[ROWS] = {6,7,8,9}; // Connect keypad COL0, COL1, COL2 and COL3 to these Arduino pins. byte colPins[COLS] = {2,3,4,5}; //connect to column pinouts // Create the Keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key != NO_KEY){ delay(50); //act as debounce beep(); Serial.println(key); } } #define SPEAKER_PIN 10 void beep(){ tone(SPEAKER_PIN,2000,90); delay(20); noTone(SPEAKER_PIN); }