この記事は、「Arduino Micro」を使った基本的なキー入力が行えることを前提としています。
「Arduino Micro」でキー入力を行ったことが無いという方は、以下の記事で説明していますので、是非、そちらを先にご覧になってください。
また、PCのOSはWindows11を使用しています。
Windows11以外のOSをお使いの方にとっては、あまり参考にならないかもしれません。
目次
本記事で使用するもの
記事を見て、気になるものがあれば、是非チェックをしてみてください。
切り取り、コピー、貼り付け
まずは、タクトスイッチを押すことによって、基本的なショートカットである「切り取り」、「コピー」、「貼り付け」を実行するといったことを行いたいと思います。
ここで、各動作のショートカットキーは以下の表のようになっています。
実行されるもの | ショートカットキー |
切り取り | ctrl + x |
コピー | ctrl + c |
貼り付け | ctrl + v |
空のスケッチを書き込む
回路を作成する前に、空のスケッチ(「ファイル」タブの「New Sketch」をクリックしたときに出てくる何の処理も書かれていないスケッチ)を書き込みます。
前に作成した回路がある場合は、その回路を崩す前に空のスケッチを書き込みます。
そうすることにより、前に書き込んだスケッチが、新しく作成しようとしている回路に影響を及ぼすことを防げます。
また、前に作成した回路を崩さずに空のスケッチを書き込むのは、ボードへの入力が無いことによって、PCへの操作が行われる場合があるからです。
新しい回路を作成するときは、いつもこの作業をやっておくと、安全に回路を作成することができます。
回路を作成する
以下のような回路を作成します。
スケッチを書き込む
回路の作成が終わりましたら、以下のようなスケッチを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
/* ArduinoMicroで操作(4,ショートカットキー); 2024/06/27 keyboard_shortcut_test スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_micro_04/ */ //ライブラリの読みこみ #include <Keyboard.h> //キー入力を行うスイッチに繋がっているピンを指定 const int keySwitches[] = { 2, 3, 4 }; //USBを繋げた瞬間暴走してしまうような状態を止めるためのピンを指定 const int pausePin = 13; void setup() { //pausePinに指定したピンを入力ピンとして設定(デフォルト設定なので省略しても良い) pinMode(pausePin, INPUT); //pausePinに指定したピンがHIGHのとき空の文を無限に行い以降の文を実行しないようにする while (digitalRead(pausePin)) {} //キー入力を行うスイッチに繋がっているピンをプルアップ付きの入力ピンとして設定する for (int i = 0; i < sizeof(keySwitches) / sizeof(keySwitches[0]); i++) { pinMode(keySwitches[i], INPUT_PULLUP); } //キーボードとして利用するための初期設定 Keyboard.begin(); } void loop() { //keySwitches[0]のスイッチが押されたら「切り取り」のショートカットを行う if (!digitalRead(keySwitches[0])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('x'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[0])) {} delay(200); } //keySwitches[1]のスイッチが押されたら「コピー」のショートカットを行う if (!digitalRead(keySwitches[1])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('c'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[1])) {} delay(200); } //keySwitches[2]のスイッチが押されたら「貼り付け」のショートカットを行う if (!digitalRead(keySwitches[2])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('v'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[2])) {} delay(200); } } |
スケッチを書き込んだ後に、キーボードの入力が勝手に行われる場合は、USBケーブルを抜いてください。
その後、回路とスケッチが間違っていないかの確認を行います。
間違って書き込んだスケッチによる操作により、修正したスケッチの書き込みが困難な場合は、対策を次の節である「スケッチの解説」にて説明していますので、先にそちらをご覧ください。
回路とスケッチが正しい場合、押したスイッチに応じてショートカットが実行されます。
以下に入力できる欄を作ったので、試しに実行してみてください。
スケッチの解説
暴走を止めるための文
私は「Arduino Micro」にスケッチを書き込むとき、以下のような文を書いて暴走したときの対処を行っています。
まず、スケッチの初めにある以下の文で、「pausePin」という定数を用意して暴走を止めるためのピンの番号を格納しています。
16 17 |
//USBを繋げた瞬間暴走してしまうような状態を止めるためのピンを指定 const int pausePin = 13; |
次に、「void setup()」初めに、以下の文を書くことにより、暴走を止めるためのピンがHIGHのとき空のループを行うようにしています。
21 22 23 24 25 |
//pausePinに指定したピンを入力ピンとして設定(デフォルト設定なので省略しても良い) pinMode(pausePin, INPUT); //pausePinに指定したピンがHIGHのとき空の文を無限に行い以降の文を実行しないようにする while (digitalRead(pausePin)) {} |
上記の文が正しく書き込めていれば、PCとの接続前に「pausePin」に指定したピン(上記の場合だと13番ピン)と5Vピンを接続することで、暴走を止めることができます。
上記の文の詳細や上記の文が機能しなかったときの対処法は、以下の記事で説明していますので、良く分からないという方は、是非以下の記事をご覧になってください。
スイッチを扱うための初期設定
スイッチを扱うための初期設定は以下の通りです。
まず、スケッチの初めにある以下の文により、キー入力を行うスイッチに繋がっているピンの番号を配列としてまとめています。
13 14 |
//キー入力を行うスイッチに繋がっているピンを指定 const int keySwitches[] = { 2, 3, 4 }; |
続いて、「void setup()」の中で以下のような文を記述しています。
27 28 29 30 |
//キー入力を行うスイッチに繋がっているピンをプルアップ付きの入力ピンとして設定する for (int i = 0; i < (sizeof(keySwitches) / sizeof(keySwitches[0])); i++) { pinMode(keySwitches[i], INPUT_PULLUP); } |
上記の文では、「sizeof()」を利用して配列の要素数を確認し、さらに「for文」で要素の数だけ処理を繰り返すことにより、配列にまとめた番号のピンをすべてプルアップ付きの入力ピンとして設定しています。
上記の文の詳細は、以下の記事で説明していますので、良く分からないという方は、是非以下の記事をご覧になってください。
ショートカットを実行する文
以下の文は「切り取り」のショートカットを実行するための文です。
38 39 40 41 42 43 44 45 46 |
//keySwitches[0]のスイッチが押されたら「切り取り」のショートカットを行う if (!digitalRead(keySwitches[0])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('x'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[0])) {} delay(200); } |
上記の文では、指定したスイッチが押されると、「Keyboard.press()」により、「ctrlキー」と「xキー」が押されているという情報を送り、処理を待つために100[ms]だけ待機した後、「Keyboard.releaseAll()」により、すべてのキーに対し押されているという情報を取り消します。
この一連の動作により、「ctrlキー」と「xキー」のショートカットである「切り取り」が実行されます。
その後記述している「while文」では、スイッチが押されている間、空のループ処理を行い、長押しの際にもう一度入力が行われることや同時に他の処理が行われることを防いでいます。
また、最後のdelay(200)はチャタリングにより、もう一度処理が行われてしまうことを防ぐために記述しています。
以上が、ショートカットを行う仕組みであり、「コピー」、「貼り付け」を行う文は、「keySwitches[]」の[]内の値と「Keyboard.press()」の()内の値を変えたものになります。
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
//keySwitches[1]のスイッチが押されたら「コピー」のショートカットを行う if (!digitalRead(keySwitches[1])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('c'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[1])) {} delay(200); } //keySwitches[2]のスイッチが押されたら「貼り付け」のショートカットを行う if (!digitalRead(keySwitches[2])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('v'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[2])) {} delay(200); } |
ここで、複数のキーによるショートカットを行う文について、一つだけ注意点があります。
以下の文ように、「xキー」を初めに押し、次に「ctrlキー」を押すようにした場合、「切り取り」が行われず、「x」の入力が行われてしまいます。
38 39 40 41 42 43 44 45 46 |
//keySwitches[0]のスイッチが押されたら「切り取り」のショートカットを行う if (!digitalRead(keySwitches[0])) { Keyboard.press('x'); Keyboard.press(KEY_LEFT_CTRL); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[0])) {} delay(200); } |
複数のキーによるショートカットの際は、皆さんが普段入力しているように、「ctrlキー」や「shiftキー」などの修飾キーを先に入力するように注意してください。
元に戻る、やり直し、保存
続いては、タクトスイッチを押すことによって、同じくよく使われるショートカットである「元に戻る」、「やり直し」、「保存」を実行するといったことを行いたいと思います。
ここで、各動作のショートカットキーは以下の表のようになっています。
実行されるもの | ショートカットキー |
元に戻る | ctrl + z |
やり直し | ctrl + y |
保存 | ctrl + s |
「やり直し」については、たまに「ctrl+shift+z」で行うソフトがあるので注意が必要ですが、多くのソフトは上記の表の通りになっていると思われます。
スケッチを書き込む
回路はそのままで以下のようなスケッチを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
/* ArduinoMicroで操作(4,ショートカットキー); 2024/06/27 keyboard_shortcut_test_2 スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_micro_04/ */ //ライブラリの読みこみ #include <Keyboard.h> //キー入力を行うスイッチに繋がっているピンを指定 const int keySwitches[] = { 2, 3, 4 }; //USBを繋げた瞬間暴走してしまうような状態を止めるためのピンを指定 const int pausePin = 13; void setup() { //pausePinに指定したピンを入力ピンとして設定(デフォルト設定なので省略しても良い) pinMode(pausePin, INPUT); //pausePinに指定したピンがHIGHのとき空の文を無限に行い以降の文を実行しないようにする while (digitalRead(pausePin)) {} //キー入力を行うスイッチに繋がっているピンをプルアップ付きの入力ピンとして設定する for (int i = 0; i < sizeof(keySwitches) / sizeof(keySwitches[0]); i++) { pinMode(keySwitches[i], INPUT_PULLUP); } //キーボードとして利用するための初期設定 Keyboard.begin(); } void loop() { //keySwitches[0]のスイッチが押されたら「元に戻る」のショートカットを行う if (!digitalRead(keySwitches[0])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('z'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[0])) {} delay(200); } //keySwitches[1]のスイッチが押されたら「やり直し」のショートカットを行う if (!digitalRead(keySwitches[1])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('y'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[1])) {} delay(200); } //keySwitches[2]のスイッチが押されたら「保存」のショートカットを行う if (!digitalRead(keySwitches[2])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('s'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[2])) {} delay(200); } } |
スケッチが正しい場合、押したスイッチに応じてショートカットが実行されます。
スケッチの解説
基本的には先程のスケッチと同じであり、「ctrlキー」と一緒に入力するキーの部分を変えただけです。
このように、少し変更を加えるだけで、自分の好きなショートカットを使えるようになるので、お気に入りのショートカットが実行できるように変更をしてみてください。
なお、「ctrl+shift+z」のショートカットを行いたい場合は、以下のように変更を加えます。
49 50 51 52 53 54 55 56 57 |
if (!digitalRead(keySwitches[1])) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('z'); delay(100); Keyboard.releaseAll(); while (!digitalRead(keySwitches[1])) {} delay(200); } |
ウィンドウを操作する
続いては、タクトスイッチを押すことによって、ウィンドウを操作するといったことを行いたいと思います。
ショートカットの説明
先程までのショートカットより、有名ではないため、まずは、今回使用しようとしているショートカットの説明を簡単に行いたいと思います。
知らないショートカットがあった場合は、ウィンドウをいくつか出して、試しに実行してみてください。
作業しているウィンドウ以外の最小化
まずは、「作業しているウィンドウ以外の最小化」のショートカットについてです。
このショートカットは、「windowsキー」を押しながら「homeキー」を押すことにより、実行が可能で、作業しているウィンドウ以外のウィンドウが最小化されます。
また、もう一度「windowsキー」を押しながら「homeキー」を押すことで、元の状態に戻すことができます。
すべてのウィンドウを最小化
続いて、「すべてのウィンドウを最小化」のショートカットについてです。
このショートカットは、「windowsキー」を押しながら「dキー」を押すことにより、実行が可能で、すべてのウィンドウが最小化されます。
また、もう一度「windowsキー」を押しながら「dキー」を押すことで、元の状態に戻すことができます。
ウィンドウの切り替え
最後に「ウィンドウの切り替え」のショートカットについてです。
このショートカットは、「altキー」を押しながら「tabキー」を押し、「tabキー」だけを離します。(「altキー」は押しっぱなし)
すると、以下のように、開いているウィンドウの一覧が表示されます。
ここで、「altキー」を押しっぱなしの状態にしたまま「tabキー」を押すことによって、緑の枠が右に移動していきます。
また、「altキー」を押しっぱなしの状態にしたまま、さらに、「shiftキー」を押しっぱなしにし、「tabキー」を押すことによって、緑の枠を左に移動させることもできます。
この緑の枠はウィンドウを選択するものであり、「altキー」を離すと緑の枠で囲われたウィンドウが最前面に移動します。
このとき、最前面に移動するウィンドウは、上記のように「tabキー」で選択せず、マウスによるクリックで選ぶこともできます。
スケッチを書き込む
回路はそのままで以下のようなスケッチを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
/* ArduinoMicroで操作(4,ショートカットキー); 2024/06/27 keyboard_shortcut_test_3 スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_micro_04/ */ //ライブラリの読みこみ #include <Keyboard.h> //キー入力を行うスイッチに繋がっているピンを指定 const int keySwitches[] = { 2, 3, 4 }; //USBを繋げた瞬間暴走してしまうような状態を止めるためのピンを指定 const int pausePin = 13; void setup() { //pausePinに指定したピンを入力ピンとして設定(デフォルト設定なので省略しても良い) pinMode(pausePin, INPUT); //pausePinに指定したピンがHIGHのとき空の文を無限に行い以降の文を実行しないようにする while (digitalRead(pausePin)) {} //キー入力を行うスイッチに繋がっているピンをプルアップ付きの入力ピンとして設定する for (int i = 0; i < sizeof(keySwitches) / sizeof(keySwitches[0]); i++) { pinMode(keySwitches[i], INPUT_PULLUP); } //キーボードとして利用するための初期設定 Keyboard.begin(); } void loop() { //条件分岐のために変数を用意 bool altFlag; //keySwitches[0]のスイッチが押されているとき「altキー」が押されているという情報を送る //加えてスイッチの状態に応じて「altFlag」の値を変化させ条件分岐に利用する if (!digitalRead(keySwitches[0])) { Keyboard.press(KEY_LEFT_ALT); altFlag = true; } else { Keyboard.release(KEY_LEFT_ALT); altFlag = false; } //keySwitches[1]のスイッチが押されたら「作業しているウィンドウ以外の最小化」のショートカットを行う //keySwitches[0]のスイッチが同時に押されている場合「ウィンドウ切り替え(左)」のショートカットを行う if (!digitalRead(keySwitches[1])) { if (altFlag) { Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press(KEY_TAB); delay(100); Keyboard.release(KEY_TAB); Keyboard.release(KEY_LEFT_SHIFT); } else { Keyboard.press(KEY_LEFT_GUI); Keyboard.press(KEY_HOME); delay(100); Keyboard.releaseAll(); } while (!digitalRead(keySwitches[1])) {} delay(200); } //keySwitches[2]のスイッチが押されたら「すべてのウィンドウを最小化」のショートカットを行う //keySwitches[0]のスイッチが同時に押されている場合「ウィンドウ切り替え(右)」のショートカットを行う if (!digitalRead(keySwitches[2])) { if (altFlag) { Keyboard.press(KEY_TAB); delay(100); Keyboard.release(KEY_TAB); } else { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('d'); delay(100); Keyboard.releaseAll(); } while (!digitalRead(keySwitches[2])) {} delay(200); } } |
スケッチが正しい場合、押したスイッチに応じてショートカットが実行されます。
スケッチの解説
「ウィンドウの切り替え」は、altキーを押しっぱなしの状態にして、「tabキー」を複数回押す必要があるため、スイッチの同時押しにより処理を行うようにしました。
また、ウィンドウの操作をするショートカットである「作業しているウィンドウ以外の最小化」、「すべてのウィンドウを最小化」を条件分岐により行えるようにしました。
altキーと分岐の準備
今回のスケッチではまず、void loop()の初めの部分で、条件分岐のための変数「altFlag」を用意しています。
また、「keySwitches[0]」のスイッチが押されているとき「altキー」が押されているという情報を送りつつ、スイッチの状態に応じて変数「altFlag」の値を変化させています。
38 39 40 41 42 43 44 45 46 47 48 49 |
//条件分岐のために変数を用意 bool altFlag; //keySwitches[0]のスイッチが押されているとき「altキー」が押されているという情報を送る //さらにスイッチの状態に応じて「altFlag」の値を変化させ条件分岐に利用する if (!digitalRead(keySwitches[0])) { Keyboard.press(KEY_LEFT_ALT); altFlag = true; } else { Keyboard.release(KEY_LEFT_ALT); altFlag = false; } |
これにより、「keySwitches[0]」のスイッチは、「altキー」の役割と条件を分岐させるという役割を担うことになります。
ショートカットを分岐させる
以下の文は、「keySwitches[1]」、「keySwitches[2]」のスイッチが押されたときの処理について書かれたものです。
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
//keySwitches[1]のスイッチが押されたら「作業しているウィンドウ以外の最小化」のショートカットを行う //keySwitches[0]のスイッチが同時に押されている場合「ウィンドウ切り替え(左)」のショートカットを行う if (!digitalRead(keySwitches[1])) { if (altFlag) { Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press(KEY_TAB); delay(100); Keyboard.release(KEY_TAB); Keyboard.release(KEY_LEFT_SHIFT); } else { Keyboard.press(KEY_LEFT_GUI); Keyboard.press(KEY_HOME); delay(100); Keyboard.releaseAll(); } while (!digitalRead(keySwitches[1])) {} delay(200); } //keySwitches[2]のスイッチが押されたら「すべてのウィンドウを最小化」のショートカットを行う //keySwitches[0]のスイッチが同時に押されている場合「ウィンドウ切り替え(右)」のショートカットを行う if (!digitalRead(keySwitches[2])) { if (altFlag) { Keyboard.press(KEY_TAB); delay(100); Keyboard.release(KEY_TAB); } else { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('d'); delay(100); Keyboard.releaseAll(); } while (!digitalRead(keySwitches[2])) {} delay(200); } |
基本的な部分は先程までのスケッチと変わりませんが、今回は変数「altFlag」とif文により処理を2通りに分けています。
これにより、「keySwitches[1]」、「keySwitches[2]」のスイッチは、「keySwitches[0]」のスイッチが押されているとき「ウィンドウの切り替え」の役割、それ以外のときは「最小化」のショートカットを行う役割を担うことになります。
ここで、「altFlag」が「true」のとき、「Keyboard.releaseAll()」ではなく、「Keyboard.release()」により、個別にキーが押されているという情報を取り消しています。
これは、「altキー」が押されているという情報を取り消さないようにするためです。
「Keyboard.release(KEY_TAB)」、「Keyboard.release(KEY_LEFT_SHIFT)」の順番は、どちらが先でも動作すると思いますが、普段皆さんが行っているように、修飾キーを後に離すようにしたほうが安定すると思われます。
スリープ、シャットダウン、再起動
最後に、タクトスイッチを押すことによって、「スリープ」、「シャットダウン」、「再起動」を実行するといったことを行いたいと思います。
ショートカットの説明
「スリープ」、「シャットダウン」、「再起動」は、複数回のキー入力を行うことで実行が可能です。
まず、「windowsキー」を押しながら「xキー」を押すことにより、スタートボタンを右クリックしたときに出てくるメニューが開きます。
しかし、このメニューは、微妙にスタートボタンを右クリックしたときに出てくるメニューと異なっており、文の右側に括弧で囲われたアルファベットが表示されています。
実は、「windowsキー」を押しながら「xキー」を押してメニューを開いた場合、この括弧で囲われたアルファベットを続けて入力することで、対象のものを実行したり、開いたりすることができます。
今回は、「スリープ」、「シャットダウン」、「再起動」を行いたいので、まず、「uキー」を入力し「シャットダウンまたはサインアウト」を開きます。
すると、また、右側に括弧で囲われたアルファベットがある文が表示されます。
ここで、続けて「sキー」を入力すれば、「スリープ」、「uキー」を入力すれば、「シャットダウン」、「rキー」を入力すれば、「再起動」を行うことができます。
スケッチを書き込む
回路はそのままで以下のようなスケッチを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
/* ArduinoMicroで操作(4,ショートカットキー); 2024/06/27 keyboard_shortcut_test_4 スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_micro_04/ */ //ライブラリの読みこみ #include <Keyboard.h> //キー入力を行うスイッチに繋がっているピンを指定 const int keySwitches[] = { 2, 3, 4 }; //USBを繋げた瞬間暴走してしまうような状態を止めるためのピンを指定 const int pausePin = 13; void setup() { //pausePinに指定したピンを入力ピンとして設定(デフォルト設定なので省略しても良い) pinMode(pausePin, INPUT); //pausePinに指定したピンがHIGHのとき空の文を無限に行い以降の文を実行しないようにする while (digitalRead(pausePin)) {} //キー入力を行うスイッチに繋がっているピンをプルアップ付きの入力ピンとして設定する for (int i = 0; i < sizeof(keySwitches) / sizeof(keySwitches[0]); i++) { pinMode(keySwitches[i], INPUT_PULLUP); } //キーボードとして利用するための初期設定 Keyboard.begin(); } void loop() { //keySwitches[0]のスイッチが押されたら「スリープ」のショートカットを行う if (!digitalRead(keySwitches[0])) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('x'); delay(200); Keyboard.releaseAll(); Keyboard.write('u'); delay(200); Keyboard.write('s'); while (!digitalRead(keySwitches[0])) {} delay(1000); } //keySwitches[1]のスイッチが押されたら「シャットダウン」のショートカットを行う if (!digitalRead(keySwitches[1])) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('x'); delay(200); Keyboard.releaseAll(); Keyboard.write('u'); delay(200); Keyboard.write('u'); while (!digitalRead(keySwitches[1])) {} delay(1000); } //keySwitches[2]のスイッチが押されたら「再起動」のショートカットを行う if (!digitalRead(keySwitches[2])) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('x'); delay(200); Keyboard.releaseAll(); Keyboard.write('u'); delay(200); Keyboard.write('r'); while (!digitalRead(keySwitches[2])) {} delay(1000); } } |
スケッチが正しい場合、押したスイッチに応じてショートカットが実行されます。
スケッチの解説
以下の文はスリープのショートカットを実行するための文です。
38 39 40 41 42 43 44 45 46 47 48 49 |
//keySwitches[0]のスイッチが押されたら「スリープ」のショートカットを行う if (!digitalRead(keySwitches[0])) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('x'); delay(200); Keyboard.releaseAll(); Keyboard.write('u'); delay(200); Keyboard.write('s'); while (!digitalRead(keySwitches[0])) {} delay(1000); } |
先程説明したキーボード入力を、「Keyboard.press()」、「Keyboard.releaseAll()」、「Keyboard.write()」を使って行っています。
各処理が行われてから、入力が行われるように、「delay()」は先程までのスケッチより長めに設定しています。
途中で処理が止まってしまうようなことがあった場合は、「delay()」を少し長めにすると解決するかもしれません。
以上が、ショートカットを行う仕組みであり、「シャットダウン」、「再起動」を行う文は、「keySwitches[]」の[]内の値と「Keyboard.write()」の()内の値を変えたものになります。
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
//keySwitches[1]のスイッチが押されたら「シャットダウン」のショートカットを行う if (!digitalRead(keySwitches[1])) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('x'); delay(200); Keyboard.releaseAll(); Keyboard.write('u'); delay(200); Keyboard.write('u'); while (!digitalRead(keySwitches[1])) {} delay(1000); } //keySwitches[2]のスイッチが押されたら「再起動」のショートカットを行う if (!digitalRead(keySwitches[2])) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('x'); delay(200); Keyboard.releaseAll(); Keyboard.write('u'); delay(200); Keyboard.write('r'); while (!digitalRead(keySwitches[2])) {} delay(1000); } |
終わりに
皆さん、ショートカットを実行させることができたでしょうか。
今回「Arduino Micro」でショートカットの実行を行う記事を書きましたが、ショートカットキーを覚えておくと、色々な操作をキーボードだけでできるようになるので、「Arduino Micro」に関係なくショートカットキーを調べてみると面白いと思います。
気に入ったショートカットを見つけたら、今回の記事を参考に「Arduino Micro」に取り入れてみてください。
次回の記事では、「Arduino Micro」でマウスの操作をするといったことを行いたいと思います。
本記事はここまでです。ご清覧ありがとうございました。
広告
今回の主役である「Arduino Micro」です。
まだ持っていないという方は、この機会に是非購入を検討してみてください。
「Arduino Micro」とPCと接続するためのケーブルです。
MicroBタイプのUSBケーブルが無い場合は、合わせて購入を検討してみてください。
今回使用したカラフルなスイッチのセットです。
スイッチを色で判別したいときや見た目をカラフルしたいときにおすすめです。
今回使用したコンパクトなブレッドボードとジャンパーワイヤーのセットです。
コンパクトな回路を作成する際に役立ちます。
今回使用したものではないですが、ショートカットキーについて書かれた本です。
ショートカットキーについての基本がしっかりと書かれているため、ショートカットをあまり使ったことが無く、これから使いこなせるようになりたいという方におすすめです。
楽天モーションウィジェットとGoogleアドセンス広告です。
気になる商品がございましたら、チェックをしてみてください。