矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 13709|回复: 10

用arduino自制鼠标—-openbook开源杂志文章推荐

[复制链接]
发表于 2013-9-28 10:43:28 | |阅读模式
          5 (1).jpg   
          上个月,又有一个鼠标在我手底下阵亡了,作为一个 DIY 达人,我从盒子里 拿出好几个不太好用的鼠标准备自己攒一个,突然发现刚到手的一个 Arduino 控制 板——DFRobot 公司生产的 Dreamer Nano(一款基于 Arduino Leonardo 的小型控制板), 早就看资料知道 Arduino Leonardo 能当鼠标或键盘用,一直也没机会试试。正好就用 Arduino 自己制作一个鼠标吧。

   开始准备制作鼠标要用的元件,如图 1 所示,清单如下。


Dreamer Nano或 Arduino Leonardo   1个
面包板                                              1块
按键                                                 5个
面包板 U 型线                                    1盒
213.jpg



材 料 准 备 好 了, 接 下 来 搭 建 硬 件, Dreamer Nano 的 核 心 是 Leonardo,I/ O 接口采用 Nano 的形式,方便与面包 板 配 合 使 用,USB 接 口 采 用 带 直 插 定 位 脚 的 Mirco USB 插 座。 如 图 2 所 示。

2.jpg
第一步,将 Dreamer Nano 插在面 包板上,如图 3 所示。这里控制板在面 包板上的位置比较偏左,这是因为之后 我们会在控制板的右侧添加一个按键。





第二步,添加 5 个按键,摆成上下左右的样子,分别控制鼠标的上下左右移动, 另外在控制板的右侧添加一个按键用作鼠标点击的功能。


第三步,使用软件 Fritzing 绘制一个连接效果图, 如图 5 所示。看起来按键的连接很杂乱,其实这是 本人为了迁就 U 型面包线的长度,反正改程序是一 件比较容易的事。大家也可以将这些按键连接到其 他引脚。

第四步,按照效果图用 U 型面包线将实物 连接起来。最终效果如图 6 所示。原理图可参 照图 7。


6.jpg



7.jpg

这样我们的硬件 就搭建完了,接下来 看看程序部分。
第 一 步, 打 开 Arduino 开发环境(开 发环境的获取、硬件


的添加这里就不介绍了,相关的内容很多),首先要将 Tools 菜单下的 Board 选项改 为 Arduino Leonardo,如图 8 所示。
8.jpg
第 二 步, 打 开 开发环境中鼠标 的 例 子, 在File— >Examples 中专门有一个 USB(Leonardo) 的 选 项, 在这里面找到 Mouse— >ButtonMouseControl。这 是一个用按键当作鼠标的 例子。
第三步,修改程序中 的引脚变量。在原代码中, 使用的是引脚 2、3、4、5、 6 作为 5 个按键的输入。
9.jpg
这里因为本人在硬件搭建上 偷懒的原因,所以使用的引脚有 所变化,根据原理图将这段代码 修改如下,其中引脚 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 线,我们的鼠标就完成了,和原来的鼠 标合个影吧。
10.jpg

11.jpg
细心的读者可能会发现我们这个鼠标只能完成左键的功能,那么右键应该如何 实现呢?大家注意在示例代码中关于 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
5.jpg
 楼主| 发表于 2013-9-28 10:44:40 |
发表于 2013-9-28 11:56:52 |
DIY的精神值得敬佩。
作为理论学习的实践性环节,是有意义的。
但实用性是么有的。
     
发表于 2013-12-3 15:49:01 |
DIY的精神值得敬佩
发表于 2013-12-24 16:29:01 |
提示: 作者被禁止或删除 内容自动屏蔽
     
发表于 2014-7-5 18:03:57 |
精神可佳,赞一个,,,
发表于 2014-7-7 23:56:17 |
看的头晕,lz的耐心真好啊
     
发表于 2014-7-8 10:14:38 |
楼主的DIY精神可嘉,佩服!
     
发表于 2016-11-17 10:09:29 |
上下按键是代表鼠标滚轮吗?
     
发表于 2016-11-17 10:21:39 |
太复杂,佩服作者diy的精神
     
发表于 2016-11-21 11:25:10 来自手机 |
先码细看 因吹思挺

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-25 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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