2011年10月29日 星期六

UsbKeypad for Arduino

上一篇中我們自製了一個 USBKeyboard,這次來自製一個 USB 數字鍵盤 (Numeric USB Keypad)。

image
▲ USBKeypad: 照片來源

準備材料

除了 Arduino 板子和 USB Shield 外,你還需要一個 Keypad:

image

關於 Keypad 的介紹與使用方法,請參考我寫的「Arduino 筆記 – Lab18 讀取 3x4 Keypad 的輸入」這篇筆記。

軟體下載與安裝

USBKeypad 程式可以在底下的網址取得:

 http://goo.gl/Ma8GT

除此之外,你還需要安裝 Keypad Library:

http://www.arduino.cc/playground/Code/Keypad

接線

照著底下這張腳位對應表連接 Arduino 與 Keypad 的接腳:

Keypad 接腳 Arduino 接腳 說明
1 12 Column0
2 11 Column1
3 10 Column2
4 9 Row0
5 8 Row1
6 7 Row3
7 6 Row4

如果你的 Keypad 腳位定義不一樣,請參考「Arduino 筆記 – Lab18 讀取 3x4 Keypad 的輸入」這篇的說明,並做適當的調整。

接線圖如下:

image

韌體調整

接著韌體要做兩個調整:

  1. 修改 usbconfig.h:  定義所用的 D+ 和 D- data lines 腳位。必須根據你的硬體調整 USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT 和 USB_CFG_DPLUS_BIT。其它不需要修改。 
  2. 這點很重要!由於 Arduino 的 timer0 ISR 執行時間太久,會影響 V-USB 的運作,所以你必須修改 Arduino-00xx\hardware\arduino\cores\arduino\wiring.c 的 Timer0 ISR,把 "sei();" 加到 ISR 的第一行,像這樣:

編譯與執行

打開 Arduino IDE,載入 UsbKeypadDemo 範例,把程式上傳到板子上。

參考下圖,在你把 USB Shield 放到 Arduino 板子上,將 USB cable 插到電腦後,「裝置管理員」視窗裏就會多出一個「USB 人性化介面裝置」:

image_thumb5 

接著打開任何一個編輯器,例如 Notepad++,然後按下 Keypad 上的任何按鈕,如果畫面上有出現數字,就代表你已經成功自製了一個 USB 數字鍵盤 (USB Numeric Keypad) 。

主程式說明

USBKeypad.pde 是主程式,主要由 setup() 和 loop() 兩個函式組成,UsbKeypadDemo.pde 完整程式碼如下:

其中,setup() 只是把 keypad debounce time 設定成 100 mS。

在 loop() 中,程式必須呼叫 UsbKeypad.update() 讓 V-USB driver 處理工作,UsbKeypad.update() 會間接呼叫 usbPoll(),根據 V-USB 的說明,usbPoll() 至少每 50 ms 要跑一次。程式接著判斷 Keypad 有沒有輸入,有的話便呼叫 UsbKeypad.sendKeyStroke() 透過 USB 介面送出對應的數字鍵訊息給電腦。

That’s all!

延伸閱讀

0 意見: