2011年11月27日 星期日

Arduino 滑鼠自動點擊器

承上篇,這次我們來做個 Arduino 滑鼠自動點擊器。

接線

我們用個可變電阻來調整滑鼠點擊的速度:

  • 可變電阻中間腳位接到類比輸入 (Analog Input) pin3,剩下的兩支腳位,一支接到 5V,另外一支接到 GND

image

image
▲ 完成圖

程式

打開 Arduino IDE,載入底下的程式並上傳到 Arduino 板子,然後把 Arduino 切到 DFU mode,用 FLIP 把 Arduino-mouse-0.1.hex 燒錄到 atmega8u2 晶片上,然後重新插拔 Arduino 的電源,這樣 Arduino 滑鼠自動點擊器就完成了 。

示範影片

Arduino 會根據可變電阻的讀值調整滑鼠點擊的速度:

Sorry,手邊沒有 buzzer,不然滑鼠點擊的時候如果可以同時「嗶」一聲會比較有感覺 。

參考資料

7 意見:

LCW 提到...

你好!!
我有幾個程式碼問題想請教前輩
1.
請問小括號內東西的代表什麼意思?
#define LEFT_BUTTON (1 << 0)
#define MIDDLE_BUTTON (1 << 1)
#define RIGHT_BUTTON (1 << 2)
2.
若要改成 連點右鍵是否修改
mouseReport.buttons = LEFT_BUTTON;

mouseReport.buttons = RIGHT_BUTTON;

謝謝^^

coopermaa 提到...

Hi,

<< 是 Left Shift operator,也就是左移位元運算子

1 << 1; // 這行會把 1 左移 1 個位元
// 1 的二進位是 00000001
// 左移 1 個位元後會變成 00000010

1 << 2; // 這行會把 1 左移 2 個位元
// 1 的二進位是 00000001
// 左移 2 個位元後會變成 00000100

1 << 0; // 左移 0 個位元,其實沒有什麼作用,1 還是 1







1 << 0; // 這行會把 1 左移 0 個位元

coopermaa 提到...

是的,如果要連點右健,就改成:

mouseReport.buttons = RIGHT_BUTTON;

不過不一定每隻滑鼠都一樣喔,因為如果是兩鍵的滑鼠,行為可能會不一樣,可能要用:

mouseReport.buttons = MIDDLE_BUTTON

LCW 提到...

感謝你這麼快的回覆@@

那麼請問為何要這樣定義三個按鍵做Shift!?

若我想要修改變成連點右鍵跟這些有關係嗎?

coopermaa 提到...

哈,因為我剛好在線上

這跟 USB Mouse Report 有關,請參考底下這篇最後面那張表格:
http://coopermaa2nd.blogspot.com/2011/11/arduino-uno-mouse.html

Mouse Report 定義了 USB 滑鼠跟電腦之間傳輸的封包格式,
所以必須照著 Mouse Report 的格式填寫資料。

LCW 提到...

感謝你的回覆^^

我剛剛以我的滑鼠測試時
mouseReport.buttons = MIDDLE_BUTTON
是連點右鍵

mouseReport.buttons = RIGHT_BUTTON;
是連點滾輪

測試兩次了的確有點詭異,是不是硬體本身不同,而造成的結果呢?

我的滑鼠有左右滾輪三鍵

coopermaa 提到...

USB Mouse Report 第一個 BYTE 是滑鼠 Button 的狀態
一個 BYTE 有 8 個 bits
其實 USB 規格並沒有說哪個位元是左鍵、右鍵和滾輪鍵...
規格上只寫說 Button 1, 2, 3, 4 ... 這樣子
所以我想實際狀況可能不是每支滑鼠都相同的