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 則留言:

  1. 你好!!
    我有幾個程式碼問題想請教前輩
    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;

    謝謝^^

    回覆刪除
  2. 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 個位元

    回覆刪除
  3. 是的,如果要連點右健,就改成:

    mouseReport.buttons = RIGHT_BUTTON;

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

    mouseReport.buttons = MIDDLE_BUTTON

    回覆刪除
  4. 感謝你這麼快的回覆@@

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

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

    回覆刪除
  5. 哈,因為我剛好在線上

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

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

    回覆刪除
  6. 感謝你的回覆^^

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

    mouseReport.buttons = RIGHT_BUTTON;
    是連點滾輪

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

    我的滑鼠有左右滾輪三鍵

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

    回覆刪除

注意:只有此網誌的成員可以留言。