2013-04-26 252 views
4

我想用我的Arduino Mini ProRN-42 HID Bluetooth模塊製作一個「鍵盤」。我可以用我的MacBook連接到它,它顯示爲藍牙鍵盤。另外,我可以按下按鈕併發送命令。Arduino + RN-42藍牙模塊HID

完美的權利嗎?

不幸的是不......我不知道如何編碼我需要發送給模塊的字節,以告訴它按鍵和鍵釋放。我一直在閱讀每一本藍牙RN-42手冊,我可以把它放在手上,但我並不完全明白我應該發送給藍牙模塊。過去幾周我一直在使用Google搜索進行搜索,而且我找不到任何能夠幫助我的C代碼。據我所知USB按鍵發送爲十六進制數組。這是正確的嗎?如果是這樣,我將如何編碼?

回答

-2

如果您希望Arduino發送鍵盤按消息到計算機,請使用Keyboard.press()用於按鍵,Keyboard.release()用於發佈。我沒有那種類型的Arduino或藍牙模塊,但是因爲它將Arduino識別爲鍵盤,所以我認爲這應該可行...

+1

感謝您的意見,但不幸的是,這並不適用於所有的Arduinos。 「鍵盤」功能僅適用於萊昂納多。 – user2238127 2013-04-28 15:24:08

+0

萊昂納多(或Micro或Due)的鍵盤庫適用於HID over USB。據我所知,它不適用於RN-42。 – efunneko 2014-08-04 00:24:41

1

因此,如果您確實擁有帶HID-611的RN-42模塊固件:

您只需將ASCII字符串發送到RN-42上的串行端口@ 115200波特,剩下的就完成了。所以如果你想Serial1.println("Hello");然後Hello(enter)將被髮送到您的Mac。如果這不起作用,那麼通過拉起GPIO11或發送命令到RN-42並打開HID模式,確保RN-42不處於SPP模式。

+0

我可以發送消息,那不是問題。我想用它來玩遊戲。現在我可以發送Serial.write('a');每次按下該按鈕時它都會打印一個'a'。但由於它在一個循環中,當我按住一個按鈕時,它會告訴計算機每隔幾微秒按一次'a',而不是實際按住按鍵。如果我做了一段時間循環,它會按一下鍵然後立即釋放。我需要找出要發送的字節,告訴計算機我正在按下並按住該鍵。 – user2238127 2013-04-28 15:28:10

+0

謝謝你的回答。你是對的,我可以發送字符串,這工作正常。但是,我如何模擬按下的按鍵?因爲我打算製作一個遊戲控制器。計算機並不知道我按住了鍵,它只是看到一堆快速按鍵而不是長按鍵(按住鍵)。 – user2238127 2013-04-29 18:50:16

5

我寫了一個arduino庫silverball,它支持鍵盤和鼠標的RN42和HID協議。我有一個示例應用程序,顯示如何通過BT模塊發送HID原始報告。我的設計是用來從自定義控制器玩遊戲。

正如之前所述,您需要將您的BT模塊設置爲HID模式(從串行連接發送命令S~,6或在啓動模塊時將GPIO11設置爲高)。默認情況下,應該將模塊設置爲出廠時的鍵盤HID,但要將其設置爲鍵盤,請將命令SH,0200發送到BT模塊,並將其設置爲鍵盤模式。

之後,你將需要簡單的發送RAW報告給BT,他們將被格式化是這樣的:

RN42 HID原始報表格式:

|start(1 byte)|length(1 byte)|descriptor(1 byte)|data(length - 1 [for the descriptor]) 

鍵盤的實例:

|0xFD|9|1|modifier|0x00|code 1|code 2|code 3|code 4|code 5|code 6 

鍵盤修飾符位(作爲一個字節發送)

bit 7 |bit 6 |bit 5 |bit 4 |bit 3 |bit 2 |bit 1 |bit 0 
rt GUI |rt alt |rt shift |rt ctrl|lt GUI |lt alt |lt shift |lt ctrl 

我的代碼可以在github上找到 - 用它來做任何你喜歡的!

+0

非常感謝。非常有幫助。我一直在爲此工作數週! – user2238127 2013-05-11 15:47:32

0

所以,如果你真的有RN-42模塊與HID-611固件:

所有你需要做的是對RN-42發送ASCII字符串到串行端口@ 115200 波特,和它會完成剩下的工作。

彼得是正確的,它很容易與RN-42 HID預裝,它可以從sparkfun standalone或方便連接甚至soldered in a board購買。