久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 24946|回復(fù): 7
收起左側(cè)

用Arduino自制鼠標(biāo)(游戲控制桿)

[復(fù)制鏈接]
ID:137190 發(fā)表于 2016-9-1 17:58 | 顯示全部樓層 |閱讀模式



1_20121211091254_bkVPX0lNR19pbWFnZTAwMQ==.jpg
上個月,又有一個鼠標(biāo)在我手底下陣亡了,作為一個DIY達(dá)人,我從盒子里拿出好幾個不太好用的鼠標(biāo),準(zhǔn)備自己攢一個。突然發(fā)現(xiàn)手邊有一塊基于Arduino Leonardo的小型控制板——DFRobot生產(chǎn)的Dreamer Nano,我早就看資料知道Arduino Leonardo能當(dāng)鼠標(biāo)或鍵盤用,一直也沒機(jī)會試試,正好就用這塊控制板自己制作一個鼠標(biāo)吧!
1_20121211091225_bkVPX0lNR19pbWFnZTAwNw==.jpg



圖1 制作所需的材料
q  1、Dreamer Nano或Arduino Leonardo              1個
q  2、面包板                                                       1塊
q  3、按鍵                                                           5個
q  4、面包板U型線                                            1盒

制作鼠標(biāo)要用的元件如圖1所示,準(zhǔn)備好材料后,就可以搭建硬件。Dreamer Nano(如圖2所示)的核心是Arduino Leonardo,I/O接口采用Nano的形式,方便與面包板配合使用,USB接口采用帶直插定位腳的Mirco USB插座。

1_20121211091219_bkVPX0lNR19pbWFnZTAwOQ==.jpg
圖2 Dreamer Nano
制作步驟
1.將Dreamer Nano插在面包板上,這里它的位置比較偏左,是因為之后我們會在其右側(cè)添加一個按鍵。
1_20121211091247_bkVPX0lNR19pbWFnZTAxMQ==.jpg

2.添加5個按鍵,擺成上下左右的樣子,分別控制鼠標(biāo)的上下左右移動,另外在控制板的右側(cè)添加一個按鍵,作為鼠標(biāo)左鍵,用來實現(xiàn)鼠標(biāo)點擊功能。
1_20121211101206_bkVPX0lNR19pbWFnZTAxMw==.jpg

3.我使用Fritzing軟件繪制了一個連接效果圖,看起來按鍵的連接很雜亂,其實這是為了遷就U型面包線的長度才這么做的,反正改程序是一件比較容易的事。大家也可以將這些按鍵連接到其他引腳。
1_20121211101201_bkVPX0lNR19pbWFnZTAxNg==.jpg
1_20121211101205_bkVPX0lNR19pbWFnZTAxOA==.jpg
4.按照效果圖,用U型面包線將實物連接起來。這樣我們的硬件就搭建完了,接下來看看程序部分。
1_20121211101228_bkVPX0lNR19pbWFnZTAyNA==.jpg

程序設(shè)計
1.打開Arduino開發(fā)環(huán)境,首先要將Tools菜單下的Board選項改為Arduino Leonardo。
1_20121211101247_bkVPX0lNR19pbWFnZTAyNg==.jpg

2.打開開發(fā)環(huán)境中鼠標(biāo)的例子,在File→Examples中專門有一個USB(Leonardo)的選項,在這里面找到Mouse→ButtonMouseControl。這是一個用按鍵當(dāng)作鼠標(biāo)的例子。
1_20121211101207_bkVPX0lNR19pbWFnZTAyOA==.jpg

3.修改程序中的引腳變量。在原代碼中,使用的是引腳2、3、4、5、6作為5個按鍵的輸入。
// 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 mouseButton = 6;
這里因為本人在硬件搭建上偷懶的原因,所以使用的引腳有所變化,可根據(jù)原理圖來修改這段代碼,其中引腳4對應(yīng)按鍵“上”,引腳6對應(yīng)按鍵“下”,引腳7對應(yīng)按鍵“左”,引腳9對應(yīng)按鍵“右”,引腳3對應(yīng)鼠標(biāo)左鍵。
const int upButton = 4;   
const int downButton = 6;        
const int leftButton = 7;
const int rightButton = 9;
const int mouseButton = 3;


4.修改setup()函數(shù)。當(dāng)Arduino的控制板引腳作為輸入時,通常要小心電壓、電流的極限值,過大的電壓、電流會造成控制板的損壞。為避免這種情況,一般會在引腳的電路上加一個上拉電阻,這里要加就加在按鍵和Arduino引腳的連接線上,電阻值一般為10kΩ。但其實Arduino控制板內(nèi)引腳是具有內(nèi)部上拉功能的,內(nèi)部上拉相當(dāng)于是在芯片內(nèi)集成了一個電阻接+5V電源,不過這需要在程序中進(jìn)行設(shè)定。假設(shè)要設(shè)定x引腳的模式為輸入,且使用內(nèi)部上拉,則代碼為:
pinMode( x ,INPUT);
digitalWrite( upButton , HIGH);
由原理圖能夠看出,我們使用的按鍵均沒有添加上拉電路,所以需要使用的這5個引腳要使能內(nèi)部上拉功能。將這段代碼添加到Mouse.begin()函數(shù)之前。
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);      
  digitalWrite(leftButton, HIGH);      
  digitalWrite(rightButton, HIGH);      
  digitalWrite(mouseButton, HIGH);

  // initialize mouse control:
  Mouse.begin();
}

5.完成最后的調(diào)試。將修改完之后的代碼下載到Arduino中,使用一下,我們發(fā)現(xiàn)鼠標(biāo)左鍵總是處于按下的狀態(tài),通過閱讀代碼發(fā)現(xiàn),這是因為程序中將引腳為高電平認(rèn)定為鼠標(biāo)按下。
if (clickState == HIGH)
{
......
而我們的硬件上,鼠標(biāo)按下時引腳電平為高,未按下時引腳電平為低。大家可以直接使用“Ctrl+F”搜索“clickState == HIGH”這段字符,將其中的HIGH改為LOW。再下載一遍程序,我們的鼠標(biāo)就完成了,和原來的鼠標(biāo)合個影吧。

1_20121211101246_bkVPX0lNR19pbWFnZTAzMA==.jpg
細(xì)心的讀者可能會發(fā)現(xiàn),我們這個鼠標(biāo)只能完成左鍵的功能,那么右鍵應(yīng)該如何實現(xiàn)呢?請大家注意示例代碼中關(guān)于MOUSE_LEFT的部分(可以直接使用“Ctrl+F”搜索),比如Mouse.press(MOUSE_LEFT)實現(xiàn)的功能就是發(fā)送一個鼠標(biāo)左鍵按下的信息。我們將MOUSE_LEFT全部換成MOUSE_RIGHT試試,就會發(fā)現(xiàn)原來的鼠標(biāo)左鍵變成了鼠標(biāo)右鍵,所以只需要在硬件上再添加一個按鈕,并在代碼中使用MOUSE_RIGHT這個定義,就可以實現(xiàn)鼠標(biāo)右鍵的功能了。
另外,在示例程序中可以看到還有JoystickMouseControl、Keyboard以及KeyboardAndMouseControl等例子,大家感興趣的話可以自己試試,比如找一個搖桿來制作一個搖桿式的鼠標(biāo),或者用Arduino制作一個游戲?qū)S檬直鹊取O聢D就是本人利用安卓平板電腦、Arduino、按鍵以及面包板制作的一個老式任天堂游戲機(jī),現(xiàn)在正在玩的游戲是經(jīng)典的《魂斗羅》。更多的樂趣期待大家去發(fā)現(xiàn)。
1_20121211101207_bkVPX0lNR19pbWFnZTAzMg==.jpg

回復(fù)

使用道具 舉報

ID:138671 發(fā)表于 2016-9-7 02:17 | 顯示全部樓層
如何實現(xiàn)滾輪和位移呢
回復(fù)

使用道具 舉報

ID:138602 發(fā)表于 2016-9-7 09:32 | 顯示全部樓層
能按出來上上下下左右左右BA嗎?
回復(fù)

使用道具 舉報

ID:146030 發(fā)表于 2016-11-6 22:41 | 顯示全部樓層
程序在哪啊
回復(fù)

使用道具 舉報

ID:198286 發(fā)表于 2017-6-13 21:47 | 顯示全部樓層
魂斗羅是安卓下的嗎?這個按鍵壽命不咋的,你這個打法一會就掛了
回復(fù)

使用道具 舉報

ID:104472 發(fā)表于 2018-9-25 22:27 | 顯示全部樓層
不錯,感覺很新奇,科技就在手中。
回復(fù)

使用道具 舉報

ID:300101 發(fā)表于 2019-9-25 10:10 | 顯示全部樓層
支持樓主再做個真正意義上的搖桿
回復(fù)

使用道具 舉報

ID:106272 發(fā)表于 2020-9-10 13:32 | 顯示全部樓層
可以實現(xiàn)滾輪和位移嗎?怎么實現(xiàn)呢
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久大陆 | 久久91精品久久久久久9鸭 | 亚洲高清电影 | 亚洲一区二区三区在线播放 | 九九热精品免费 | 狠狠亚洲| 国产在线视频一区二区董小宛性色 | 国产欧美在线播放 | 综合久久av | 国产在线精品一区二区 | 国产精品18hdxxxⅹ在线 | 奇米影视首页 | 久久久资源 | 亚洲国产高清免费 | 亚州成人| 成人免费毛片片v | 国产精品免费一区二区三区 | 99国产精品久久久久久久 | 99精品99久久久久久宅男 | 亚洲精品成人网 | 国产一区二区在线免费视频 | 网站国产 | 91原创视频 | 日日夜夜精品视频 | 久久视频免费看 | 久久久久久91香蕉国产 | 激情久久av一区av二区av三区 | 人和拘一级毛片c | 久久亚洲一区二区三区四区 | 国产精品亚洲综合 | 红桃视频一区二区三区免费 | 狠狠亚洲 | 欧美日韩一区二区在线观看 | 欧美一级黄色免费看 | 在线看av的网址 | 久久高清| 国产欧美日韩一区二区三区在线 | 日韩α片 | 成人免费视频一区 | 国产欧美一区二区三区在线播放 | 午夜精品一区 |