2011年11月25日 星期五

讀取鍵盤燈號狀態

承上篇,Arduino Uno Keyboard 除了可以讓 Arduino 送出按鍵敲擊動作 (keystroke) 給電腦外,還可以讀取鍵盤上的燈號狀態 (keyboard LEDs status),例如 Num Lock, Caps Lock 和 Scroll Lock。接著我們就來看個簡單範例,學習如何用 Arduino 讀取鍵盤的燈號狀態。

image

程式碼

這個範例程式放在 Arduino Keyboard 裏。請打開 Arduino IDE, 載入 "File > Sketchbook > Arduino-keyboard > ledStatus" 然後把程式上傳到 Arduino 板子上:

image

程式上傳到 Arduino 板子上後,接著把 Arduino 切到 DFU mode,用 FLIP 把 Arduino-keyboard-0.3.hex 燒錄到 atmega8u2 晶片上,然後重新插拔 Arduino 的電源。

底下是這支程式的 (ledStatus.pde) 的完整程式碼。程式邏輯很簡單,只是每 100 mS 讀取一次鍵盤燈號狀態,然後判斷 Caps Lock 有沒被按下,有的話就打開 pin 13 上的 led,否則就關掉 pin 13 上的 led:

示範影片
程式說明

在這個範例裏面,程式每隔 100 mS 就會送出一個 keyNone 的 keyStroke 出來:

不管送哪一個 keystroke 都可以,每當 Arduino Uno keyboard firmware 收到一個 keystroke 的時候,它就會傳回代表鍵盤狀態的 1 個 bye 的資料。這 1 個 byte 的資料結構如下:

Bit Description
0 Num Lock
1 Caps Lock
2 Scroll Lock
3 Compose
4 KANA
5-7 Constant

標準鍵盤總共有 5 顆 LED,不過實際上並非每個鍵盤都如此,大部份鍵盤只有 Num Lock, Caps Lock 和 Scroll Lock 這三顆 LED。在這支範例中,程式會根據 Caps Lock 的狀態來決定要打開或關掉 pin 13 上的 led,因此在讀回鍵盤燈號狀態並存放到 ledStatus 變數中後,就判斷 ledStatus 變數的 Caps Lock (Bit 1 ) 這個位元的狀態,假如是 1 便打開 led,不然如果是 0 的話就關掉 led。

參考資料

0 意見: