佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2134|回复: 3

让Arduino读取键盘

[复制链接]
发表于 16-4-2013 04:44 PM | 显示全部楼层 |阅读模式

这里提供两种方式让Arduino读取键盘,矩阵(Matrix)键盘和PS2键盘。要Arduino侦察到键盘,唯有安装键盘程序库(library)。

矩阵键盘
要让Arduino侦察到矩阵键盘,就必须使用Arduino Playground里的Keypad 键盘库,此 键盘库支持3x4, 4x4以及各种矩阵结构的键盘。

安装Keypad键盘库
下载Arduino Keypad键盘库
把keypad.zip里的文件夹解压至Arduino软件的libraries文件夹,如图

完成键盘库安装后,可以连接Arduino与键盘来测试了

4x4矩阵keypad示范
我用的4x4矩阵键盘,如图
100_5151_500x392.jpg


键盘和Arduino接法如下
Arduino
4x4 Keypad
D2
1
D3
2
D4
3
D5
4
D6
5
D7
6
D8
7
D9
8

上载以下代码至Arduino
  1. #include <Keypad.h>

  2. const byte ROWS = 4; // Four rows
  3. const byte COLS = 4; // Four columns

  4. //Define the keymap
  5. char keys[ROWS][COLS] = {
  6. {'1','2','3','A'},
  7. {'4','5','6','B'},
  8. {'7','8','9','C'},
  9. {'*','0','#','D'}
  10. };

  11. //// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
  12. byte rowPins[ROWS] = {2,3,4,5};

  13. // Connect keypad COL0, COL1, COL2 and COL3 to these Arduino pins.
  14. byte colPins[COLS] = {6,7,8,9}; //connect to column pinouts

  15. // Create the Keypad
  16. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

  17. void setup(){
  18.    Serial.begin(9600);
  19. }

  20. void loop(){
  21.    char key = keypad.getKey();

  22.    if (key != NO_KEY){
  23.    Serial.println(key);
  24.    }
  25. }
复制代码
完成上载后,用Arduino软件的Serial Monitor来测试(Baud rate必须设成9600)。
当测试时,只要按下谋键,其返回值将显示在Serial Monitor。

本帖最后由 西门庆33 于 16-4-2013 04:57 PM 编辑

回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 16-4-2013 04:46 PM | 显示全部楼层
PS2键盘
要让Arduino侦察到PS2键盘,就必须使用PS2keypad 键盘库

安装Arduino PS2键盘库
  • 下载Arduino PS2键盘库
  • 将下载了的文件(PS2keyboard.zip)解压至Arduino软件的libraries文件夹
  • 安装方法与安装keypad相似,请参考之

PS2键盘示范
根据下面接线连接键盘至Arduino


Keyboard
Arduino
4 (+5V)
5V
3 (GND)
GND
5 (Clock)
Digital Pin 3
1 (Datak)
Digital Pin 4


上载以下代码至Arduino
  1. #include <PS2Keyboard.h>

  2. const int DataPin = 8;
  3. const int IRQpin = 5;

  4. PS2Keyboard keyboard;

  5. void setup() {
  6.    delay(1000);
  7.    keyboard.begin(DataPin, IRQpin);
  8.    Serial.begin(9600);
  9.    Serial.println("Keyboard Test:");
  10. }

  11. void loop() {
  12.    if (keyboard.available()) {

  13.    char c = keyboard.read();  // read the next key

  14.    // check for some of the special keys
  15.    if (c == PS2_ENTER) {
  16.       Serial.println();
  17.    } else if (c == PS2_TAB) {
  18.       Serial.print("[Tab]");
  19.    } else if (c == PS2_ESC) {
  20.       Serial.print("[ESC]");
  21.    } else if (c == PS2_PAGEDOWN) {
  22.       Serial.print("[PgDn]");
  23.    } else if (c == PS2_PAGEUP) {
  24.       Serial.print("[PgUp]");
  25.    } else if (c == PS2_LEFTARROW) {
  26.       Serial.print("[Left]");
  27.    } else if (c == PS2_RIGHTARROW) {
  28.       Serial.print("[Right]");
  29.    } else if (c == PS2_UPARROW) {
  30.       Serial.print("[Up]");
  31.    } else if (c == PS2_DOWNARROW) {
  32.       Serial.print("[Down]");
  33.    } else if (c == PS2_DELETE) {
  34.       Serial.print("[Del]");
  35.    } else {
  36.       Serial.print(c);  // otherwise, just print all normal characters
  37.    }
  38. }
  39. }
复制代码
完成上载后,用Arduino软件的Serial Monitor来测试(Baud rate必须设成9600)。
当测试时,只要按下谋键,其返回值将显示在Serial Monitor。

本帖最后由 西门庆33 于 16-4-2013 05:05 PM 编辑

回复

使用道具 举报

 楼主| 发表于 16-4-2013 11:04 PM | 显示全部楼层
捕充一下PS2插座
之前用这个PS2插座,是从坏了的主机板拆下来的,焊接很麻烦。
ps2.jpg


之后买了这条一出二(一公二母)的PS2延长线,把中间切断,变成了两个PS2插孔,用在两个projects
y cable.jpg


本帖最后由 西门庆33 于 16-4-2013 11:06 PM 编辑

回复

使用道具 举报

 楼主| 发表于 26-4-2013 11:48 AM | 显示全部楼层
增加按键音效
Connecting PC speaker to Arduino.jpg
具体浏览这里
  1. #include <Keypad.h>
  2. const byte ROWS = 4; // Four rows
  3. const byte COLS = 4; // Four columns

  4. //Define the keymap
  5. char keys[ROWS][COLS] = {
  6. {'1','2','3','A'},
  7. {'4','5','6','B'},
  8. {'7','8','9','C'},
  9. {'*','0','#','D'}
  10. };

  11. //// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
  12. byte rowPins[ROWS] = {6,7,8,9};

  13. // Connect keypad COL0, COL1, COL2 and COL3 to these Arduino pins.
  14. byte colPins[COLS] = {2,3,4,5}; //connect to column pinouts

  15. // Create the Keypad
  16. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

  17. void setup(){
  18.    Serial.begin(9600);
  19. }

  20. void loop(){
  21.    char key = keypad.getKey();
  22.    if (key != NO_KEY){
  23.      delay(50); //act as debounce
  24.      beep();
  25.      Serial.println(key);
  26.    }
  27. }

  28. #define SPEAKER_PIN 10
  29. void beep(){
  30.    tone(SPEAKER_PIN,2000,90);
  31.    delay(20);
  32.    noTone(SPEAKER_PIN);
  33. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 20-4-2024 08:51 PM , Processed in 0.069115 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表