|
上个月,又有一个鼠标在我手底下阵亡了,作为一个 DIY 达人,我从盒子里 拿出好几个不太好用的鼠标准备自己攒一个,突然发现刚到手的一个 Arduino 控制 板——DFRobot 公司生产的 Dreamer Nano(一款基于 Arduino Leonardo 的小型控制板), 早就看资料知道 Arduino Leonardo 能当鼠标或键盘用,一直也没机会试试。正好就用 Arduino 自己制作一个鼠标吧。
开始准备制作鼠标要用的元件,如图 1 所示,清单如下。
Dreamer Nano或 Arduino Leonardo 1个
面包板 1块
按键 5个
面包板 U 型线 1盒
材 料 准 备 好 了, 接 下 来 搭 建 硬 件, Dreamer Nano 的 核 心 是 Leonardo,I/ O 接口采用 Nano 的形式,方便与面包 板 配 合 使 用,USB 接 口 采 用 带 直 插 定 位 脚 的 Mirco USB 插 座。 如 图 2 所 示。
第一步,将 Dreamer Nano 插在面 包板上,如图 3 所示。这里控制板在面 包板上的位置比较偏左,这是因为之后 我们会在控制板的右侧添加一个按键。
第二步,添加 5 个按键,摆成上下左右的样子,分别控制鼠标的上下左右移动, 另外在控制板的右侧添加一个按键用作鼠标点击的功能。
第三步,使用软件 Fritzing 绘制一个连接效果图, 如图 5 所示。看起来按键的连接很杂乱,其实这是 本人为了迁就 U 型面包线的长度,反正改程序是一 件比较容易的事。大家也可以将这些按键连接到其 他引脚。
第四步,按照效果图用 U 型面包线将实物 连接起来。最终效果如图 6 所示。原理图可参 照图 7。
这样我们的硬件 就搭建完了,接下来 看看程序部分。
第 一 步, 打 开 Arduino 开发环境(开 发环境的获取、硬件
的添加这里就不介绍了,相关的内容很多),首先要将 Tools 菜单下的 Board 选项改 为 Arduino Leonardo,如图 8 所示。
第 二 步, 打 开 开发环境中鼠标 的 例 子, 在File— >Examples 中专门有一个 USB(Leonardo) 的 选 项, 在这里面找到 Mouse— >ButtonMouseControl。这 是一个用按键当作鼠标的 例子。
第三步,修改程序中 的引脚变量。在原代码中, 使用的是引脚 2、3、4、5、 6 作为 5 个按键的输入。 9
这里因为本人在硬件搭建上 偷懒的原因,所以使用的引脚有 所变化,根据原理图将这段代码 修改如下,其中引脚 4 对应按键 “上”,引脚 6 对应按键“下”, 引脚 7 对应按键“左”,引脚 9 对应按键“右”,引脚 3 对应鼠 标左键。
// set pin numbers for the five buttons:
const int upButton = 2;
const int downButton = 3;
const int leftButton = 4;
const int rightButton = 5;
const int upButton = 4;
const int downButton = 6;
const int leftButton = 7;
const int rightButton = 9;
第四步,修改 setup() 函数。当 Arduino 的控制板引脚作为输入的时候,通常要 小心电压、电流的极限值。过大的电压、电流会造成控制板的损坏。为避免这种情况, 一般会在引脚的电路上加一个上拉电阻,像图 7 中就是加在按键和 Arduino 引脚的连 接线上,电阻的大小一般为 10kΩ。
但其实 Arduino 控制板内引脚是具有内部上拉功能的,内部上拉相当于是在芯片 内集成了一个电阻接 +5V 电源,不过这需要在程序中进行设定。假设要设定 x 引脚 的模式为输入,且使用内部上拉,则代码为
pinMode( x ,INPUT);
digitalWrite( upButton , HIGH);
由原理图能够看出,我们使用的按键均没有添加上拉电路,所以需要使用的 这 5 个引脚使能内部上拉功能。将这段代码添加到 Mouse.begin() 函数之前,完成后 setup() 函数内容如下。
void setup() {
//initialize the buttons’ inputs:
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(leftButton, INPUT);
pinMode(rightButton, INPUT);
pinMode(mouseButton, INPUT);
digitalWrite(upButton, HIGH);
digitalWrite(downButton, HIGH);
}
第五步,完成最后的调试。将修改完之后的代码下载到 Arduino 中,使用一下, 我们发现鼠标左键总是处于按下的状态,通过阅读代码发现这是因为程序中将引脚 为高电平认定为鼠标按下。
if (clickState == HIGH) {
…… }
而我们的硬件上鼠标按下时引脚电平为高,未按下时引脚电平为低。大家可以直 接使用 Ctrl+F 搜索“clickState == HIGH”这段字符,将其中的 HIGH 改为 LOW。
再下载一遍程序,ok,再连上一段 USB 线,我们的鼠标就完成了,和原来的鼠 标合个影吧。
细心的读者可能会发现我们这个鼠标只能完成左键的功能,那么右键应该如何 实现呢?大家注意在示例代码中关于 MOUSE_LEFT 的部分(可以直接使用 Ctrl+F 搜 索),比如 Mouse.press(MOUSE_LEFT) 实现的功能就是发送一个鼠标左键按下的信息。 我们将 MOUSE_LEFT 全部换成 MOUSE_RIGHT 试试看就会发现原来鼠标左键变成 了鼠标右键,所以鼠标右键的实现只需要在代码中使用 MOUSE_RIGHT 这个定义就 可以完成了,而使用 MOUSE_MIDDLE 就能实现鼠标中键的功能。大家可以试着在 硬件上再添加一个按钮实现鼠标右键的功能。
大家感兴趣的话可以自己试试,找一个摇杆作一个摇杆式的鼠标,或者可以用 Arduino 做一个游戏专用手柄等等。图 11 就是本人利用安卓平板、Arduino、按键以 及面包板制作的一个老式任天堂游戏机,现在正在玩的游戏是经典的“魂斗罗”。
OPENBOOK开源杂志订阅地址 list.qq.com/cgi-bin/qf_invite?id=18fc30e7e1e90e5179fdeb75a62e8052e8893dfbbb6fcf80
OPENBOOK第四期下载: share.weiyun.com/786489dbce5af5c78563d13431e47dc4
OPENBOOK官网: open1book.com
openbook官微: weibo.com/openebook
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|