Digikeyboard の Winキーと矢印キー(上、下、右)

Digisparkでキーボードマクロ


Windows PCなどのUSBポートにDigisparkを差し込むとプログラム通りにキーボードマクロを実行できる。
たとえば、Digisparkにボタンを接続して、1個のキーを押すと「Hello」とか入力できる。
互換製品なら500円ぐらい、まとめ買いなら6個で2000円程度で買える。
Rasbee Digispark Kickstarter ATTINY85 Micro USB 開発ボード Arduinoに対応 並行輸入品
Rasbee Digispark Kickstarter ATTINY85 Micro USB 開発ボード Arduinoに対応 並行輸入品
ACEIRMC 6個 Digispark Kickstarter Attiny85 ジェネラルマイクロUSB開発ボード
ACEIRMC 6個 Digispark Kickstarter Attiny85 ジェネラルマイクロUSB開発ボード
プログラムの開発環境にはArduino IDEを使いキーボードのふりをしたい場合は、digikeyboard というライブラリを使う。
自分で作るのが面倒な人は、「のるLAB」さんのMacrokey4 (4個キーでDigispark内蔵)を使う手もある。

サンプルプログラムをちょっと直せば簡単なマクロが作成できる

digikeyboard

ここから先は、Arduino言語を知っている前提の話になる。
「Hello」と送信したい場合は次のようになる。
DigiKeyboard.print("Hello");
※予め「DigiKeyboard.sendKeyStroke(0);」などを送信する必要あるが、主題から外れるので省略。
クリップボードの貼り付けなどの、コントロールキーを押しながら、[V]キーを押す場合はこんな感じ:
DigiKeyboard.sendKeyStroke(KEY_V, MOD_CONTROL_LEFT);

Winキーがない?

Windows エクスプローラを起動するキーマクロを作りたいとする。この場合、Winキーを押しながら[E]キーを押す定義する。 Winキーの定義はないが、代わりにMOD_GUI_LEFTを使ってこんな感じにする:
DigiKeyboard.sendKeyStroke(KEY_E, MOD_GUI_LEFT);
ここが少し分かりにくいところ。Macではどうなるのだろう?

左矢印(←)キーがあるのに上(↑)、下(↓)、右(→)がない?

Winキーと矢印キー(←、→、↑、↓)を同時に押すと、画面上のウィンドウの位置を左寄せや、最大化ができる。
たとえば、Winキーを押しながら、左矢印キーを押す定義は次のようになる。
DigiKeyboard.sendKeyStroke(KEY_ARROW_LEFT, MOD_GUI_LEFT);

同じ原理でWinキーを押しながら、右矢印キーを押す定義は次のようになると言いたいが…
DigiKeyboard.sendKeyStroke(KEY_ARROW_RIGHT, MOD_GUI_LEFT);
上記をコンパイルするとコンパイルすると下記のエラーが表示される
'KEY_ARROW_RIGHT' was not declared in this scope
DigiKeyboard.hの中を調べてみると、左矢印(←)の定義はあるが、右上下(→、↑、↓)の定義がない。そんなわけで、プログラムの先頭かヘッダファイルに下記を定義して回避する
#define KEY_ARROW_RIGHT (0x4F)
#define KEY_ARROW_DOWN (0x51)
#define KEY_ARROW_UP (0x52)

参考

github上のDigiKeyboard.h を見ると例の矢印キーの定義が2016年3月8日に追加されている。
https://github.com/digistump/DigistumpArduino/blob/master/digistump-avr/libraries/DigisparkKeyboard/DigiKeyboard.h
なぜか、Arduino IDEでは更新されていない。

この記事へのコメント

この記事へのトラックバック