在上一篇中我們自製了一個 USBKeyboard,這次來自製一個 USB 數字鍵盤 (Numeric USB Keypad)。
▲ USBKeypad: 照片來源
準備材料
除了 Arduino 板子和 USB Shield 外,你還需要一個 Keypad:
關於 Keypad 的介紹與使用方法,請參考我寫的「Arduino 筆記 – Lab18 讀取 3x4 Keypad 的輸入」這篇筆記。
軟體下載與安裝
USBKeypad 程式可以在底下的網址取得:
除此之外,你還需要安裝 Keypad Library:
接線
照著底下這張腳位對應表連接 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 的輸入」這篇的說明,並做適當的調整。
接線圖如下:
韌體調整
接著韌體要做兩個調整:
- 修改 usbconfig.h: 定義所用的 D+ 和 D- data lines 腳位。必須根據你的硬體調整 USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT 和 USB_CFG_DPLUS_BIT。其它不需要修改。
- 這點很重要!由於 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 人性化介面裝置」:
接著打開任何一個編輯器,例如 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 意見:
張貼留言