Arduino通过PS2模块使用PS2鼠标
2017-11-12 20:02
771 查看
上一篇文件介绍了如何使用Arduino通过PS2模块读取PS2键盘信息,接下来顺理成章的就是如何让Arduino通过PS2模块读取PS2的鼠标信息。于是找了一个PS2口的鼠标,实物如下:
1、使用示例 不管具体的通信原理,先在网上找一个能用的PS2Mouse库来进行测试,看Arduino能不能正常的与鼠标通信,我在网上找了两个库,分别是: 1)https://github.com/kristopher/PS2-Mouse-Arduino。
2)http://playground.arduino.cc/ComponentLib/Ps2mouse 在使用这两个库中自带的示例程序进行测试时,一开始Arduino程序编译报错,说是找不到WProgram.h头文件,通过在百度上搜索原因,发现原来是这个头文件过时了,现在Arduino编译时使用的头文件名称是Arduino.h,网上给出的解决方法是将 # include<WProgram.h>这句改为 #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif 将两个库中相关的代码进行替换后在进行编译,问题解决。 本文采用第一个库文件中自带的示例进行测试,测试代码如下: #include <PS2Mouse.h>
#define MOUSE_DATA 5
#define MOUSE_CLOCK 6
PS2Mouse mouse(MOUSE_CLOCK, MOUSE_DATA, STREAM);
void setup()
{
Serial.begin(38400);
mouse.initialize();
}
void loop()
{
int data[2];
mouse.report(data);
Serial.print(data[0]); // Status Byte
Serial.print(":");
Serial.print(data[1]); // X Movement Data
Serial.print(",");
Serial.print(data[2]); // Y Movement Data
Serial.println();
}
测试代码的实物连接图如下:
代码测试一切正常,这里就不在贴串口输出的数据了。需要说明的是,由于库函数实现方式不同,使用本文提及的PS2mouse库时没有像PS2Keyboard一样限制CLK引脚必须要连接在Arduino上支持中断的引脚上,本文提及的两个库可以使用Arduino中的所有数字引脚。
2、通信原理简介 参考文献1对PS2口的鼠标通信原理进行了详细的介绍,我在这里仅对里面的部分内容进行简介,感兴趣的同志可以去看参考文献1的原文。 PS2口的鼠标最初是二十世纪八十年底在IBM的Personal System/2计算机上出现的,但现在慢慢被USB口的鼠标给替代了。 PS2口的鼠标接口使用双向的串口协议想计算机传递鼠标移动和按钮信息,同时计算机也可以向鼠标发送命令来设置信息发送频率、精度、重启鼠标、停用鼠标等。 标准的PS2口的鼠标支持以下信息:X方向运动(左、右)、Y方向运动(上下)、左边按钮、中间按钮、右边按钮。鼠标会定期根据这些信息计算位移和按钮状态,然后更新计数器和标志位。 鼠标有四种模式: 1)Reset Mode:该模式用于初始化。在该模式中,鼠标执行初始化和自检操作; 2)Stream Mode:默认的模式。在该模式中,如果鼠标发生移动,或者鼠标按钮状态发生变化,鼠标会想PS2口发送信息包; 3)Remote Mode:在该模式中,与鼠标通信的设备会主动向鼠标获取位移信息; 4)Wrap Mode:该模式是一个单一的调试模式,在该模式中,鼠标会将与其通信的设备发送的信息包再返回给设备。 可以向鼠标发送以下命令进行通信:
我就翻译了参考文献1中的一小部分内容,如果对其感兴趣,可以直接去看原文。
参考文献[1]http://www.computer-engineering.org/ps2mouse/[2]http://playground.arduino.cc/ComponentLib/Ps2mouse
1、使用示例 不管具体的通信原理,先在网上找一个能用的PS2Mouse库来进行测试,看Arduino能不能正常的与鼠标通信,我在网上找了两个库,分别是: 1)https://github.com/kristopher/PS2-Mouse-Arduino。
2)http://playground.arduino.cc/ComponentLib/Ps2mouse 在使用这两个库中自带的示例程序进行测试时,一开始Arduino程序编译报错,说是找不到WProgram.h头文件,通过在百度上搜索原因,发现原来是这个头文件过时了,现在Arduino编译时使用的头文件名称是Arduino.h,网上给出的解决方法是将 # include<WProgram.h>这句改为 #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif 将两个库中相关的代码进行替换后在进行编译,问题解决。 本文采用第一个库文件中自带的示例进行测试,测试代码如下: #include <PS2Mouse.h>
#define MOUSE_DATA 5
#define MOUSE_CLOCK 6
PS2Mouse mouse(MOUSE_CLOCK, MOUSE_DATA, STREAM);
void setup()
{
Serial.begin(38400);
mouse.initialize();
}
void loop()
{
int data[2];
mouse.report(data);
Serial.print(data[0]); // Status Byte
Serial.print(":");
Serial.print(data[1]); // X Movement Data
Serial.print(",");
Serial.print(data[2]); // Y Movement Data
Serial.println();
}
测试代码的实物连接图如下:
代码测试一切正常,这里就不在贴串口输出的数据了。需要说明的是,由于库函数实现方式不同,使用本文提及的PS2mouse库时没有像PS2Keyboard一样限制CLK引脚必须要连接在Arduino上支持中断的引脚上,本文提及的两个库可以使用Arduino中的所有数字引脚。
2、通信原理简介 参考文献1对PS2口的鼠标通信原理进行了详细的介绍,我在这里仅对里面的部分内容进行简介,感兴趣的同志可以去看参考文献1的原文。 PS2口的鼠标最初是二十世纪八十年底在IBM的Personal System/2计算机上出现的,但现在慢慢被USB口的鼠标给替代了。 PS2口的鼠标接口使用双向的串口协议想计算机传递鼠标移动和按钮信息,同时计算机也可以向鼠标发送命令来设置信息发送频率、精度、重启鼠标、停用鼠标等。 标准的PS2口的鼠标支持以下信息:X方向运动(左、右)、Y方向运动(上下)、左边按钮、中间按钮、右边按钮。鼠标会定期根据这些信息计算位移和按钮状态,然后更新计数器和标志位。 鼠标有四种模式: 1)Reset Mode:该模式用于初始化。在该模式中,鼠标执行初始化和自检操作; 2)Stream Mode:默认的模式。在该模式中,如果鼠标发生移动,或者鼠标按钮状态发生变化,鼠标会想PS2口发送信息包; 3)Remote Mode:在该模式中,与鼠标通信的设备会主动向鼠标获取位移信息; 4)Wrap Mode:该模式是一个单一的调试模式,在该模式中,鼠标会将与其通信的设备发送的信息包再返回给设备。 可以向鼠标发送以下命令进行通信:
名称 | 意义 |
0xFF | 重启,鼠标进入Reset Mode |
0xFE | 重新发送命令,设备如果从鼠标接收到错误信息,可以发送此命令要求鼠标重新发送信息包 |
0xF6 | 该命令将鼠标设置重置为默认值 |
0xF5 | 停止数据发送命令,该命令使鼠标不在向设备发送数据包,并 重置位移计数器 |
0xF4 | 重新发送数据命令 |
0xF3 | 该命令用于设置鼠标的采样频率 |
0xF2 | 该命令用于活动鼠标的设备ID |
0xF0 | 鼠标进入Remote Mode |
0xEE | 鼠标进入Wrap Mode |
0xEC | 重置鼠标的位移计数器,并将鼠标模式设置为进入Wrap Mode之前的模式 |
0xEB | 鼠标想PS2口发送一个运动数据包,这是Remote Mode下设备读取鼠标信息的唯一方式 |
0xEA | 重置鼠标的位移计数器,并将鼠标模式设置为Stream Mode |
0xE9 | 该命令获取鼠标的状态信息 |
参考文献[1]http://www.computer-engineering.org/ps2mouse/[2]http://playground.arduino.cc/ComponentLib/Ps2mouse
相关文章推荐
- Arduino通过PS2模块使用PS2键盘
- 【arduino】通过Esp8266-01模块实现的WiFi通信(3)使用TCP协议进行局域网通信(client篇)
- 关于arduino 使用 ESP 8266 01 模块初学所遇问题
- 【arduino】通过Esp8266-01模块实现的WiFi通信(1)简介和搭建编程环境
- logging模块的使用--通过网络收发日志
- Arduino入门教程—RFID模块的使用(MF RC522)
- Arduino使用手指测心跳模块
- 在Arduino上面使用震动开关模块
- python 使用mysqldb模块通过SSHTunnelForwarder隧道连接mysql
- 内核子系统或设备驱动可以直接编译到内核,也可以编译成模块,如果编译到内核,可以使用前一节介绍的方法通过内核启动参数来向它们传递参数,如果编译成模块,则可以通过命令行在插入模块时传递参数,或者在运行时,
- 如何使用python来模拟鼠标点击(将通过实例自动化模拟在360浏览器中自动搜索"python")
- Arduino使用TEMP 18B20模块
- [Arduino]HC-06蓝牙模块使用小结
- 设置窗体可以使用鼠标拖动大小 通过
- Arduino使用敲击模块和光遮断
- Arduino中MFRC-522射频IC卡感应模块使用
- PS2鼠标使用USB接口的转换器
- arduino mega2560与HC-06蓝牙模块使用
- python使用smtplib模块通过gmail实现邮件发送的方法
- 使用Django开发一个图书管理系统----04.通过admin模块管理我们的app和model