在Arduino论坛看到了参考文献1介绍的内容之后,就特别想动手试一下,于是在淘宝上买了PS2模块,实物图如下:
![Arduino通过PS2模块使用PS2键盘 - gc_2299 - gc_2299的博客 Arduino通过PS2模块使用PS2键盘 - gc_2299 - gc_2299的博客](http://img0.ph.126.net/c1o_zJlu1fUJ-ECFxTfRVA==/6632359691861192025.png)
该模块有四个引脚,意义分别如下:
+5V:接电源正极;
GND:接电源负极;
DAT:数据引脚,可以与任意的Arduino数字引脚相连;
CLK:时钟引脚,需要与Arduino中支持中断的引脚相连,在UNO上是数字引脚2和3.
1、从键盘接收命令
键盘数据的原理可以看参考文献2,那篇文章讲解的比较详细。我在进行测试的时候,使用的库是从下面的网址中找到的:
https://www.pjrc.com/teensy/td_libs_PS2Keyboard.html
该库中附带了两个示例代码,Simple_Test和International,这两个示例中International仅仅是将读取的键盘字符原封不动的打印到串口,而Simple_Test则解析了一些特殊符号,例如如果读取的键盘符号是回车符,则调用串口类的println函数打印空字符。
测试的实物连接图如下:
![Arduino通过PS2模块使用PS2键盘 - gc_2299 - gc_2299的博客 Arduino通过PS2模块使用PS2键盘 - gc_2299 - gc_2299的博客](http://img2.ph.126.net/GXRWbQaylRgHm1utrpeB2w==/6631978161329025281.jpg)
2、向键盘发送命令
第一节给出的ps2键盘库文件可以读取大部分的键盘信息,但是它只能从键盘读取信息,无法向键盘发送信息。比如如果想控制键盘上的大写灯、小键盘灯的开、关,第一节的库就无法做到。为此,在网上又找了另外一个高级的ps2keyboard库,网址如下:
https://github.com/techpaul/PS2KeyAdvanced
使用该库,当按下键盘上的大写灯、小键盘灯时,该库在解析键盘信息的同时,将键盘灯设置为正确的状态。该库带有三个示例,感兴趣的朋友可以自行看示例代码。我进行测试的时候使用的是advcodetest这个示例,测试时既可以获取到按键信息,同时可以看到键盘灯的状态发生变化,这里就不贴代码了,如果对与键盘的交互原理感兴趣,可以看看参考文献3和4。
使用高级键盘库的注意事项与第一节类似,CLK引脚要连接支持中断的引脚。
参考文献
[1]http://www.arduino.cn/forum.php?mod=viewthread&tid=42139&highlight=ps2
[2]http://www.freebuf.com/sectool/59045.html
[3]http://codeandlife.com/2013/07/15/arduino-ps2-keyboard-tester/
[4]http://www.computer-engineering.org/ps2protocol/
[5]https://github.com/techpaul/PS2KeyAdvanced