この記事は、「Arduino Micro」を使った基本的なキー入力が行えることを前提としています。
「Arduino Micro」でキー入力を行ったことが無いという方は、以下の記事で説明していますので、是非、そちらを先にご覧になってください。
また、PCのOSはWindows11を使用しています。
Windows11以外のOSをお使いの方にとっては、あまり参考にならないかもしれません。
目次
本記事で使用するもの
記事を見て、気に入ったものがあれば、是非チェックをしてみてください。
キー入力だけでファイルを実行する
まず、Arduino Micoroを使う前に、キー入力だけでファイルを実行するといったことを行いたいと思います。
キー入力だけでファイルを実行する方法はいくつかありますが、今回は「Windowsキー」と「rキー」の同時押しで出てくる「ファイル名を指定して実行」を利用したいと思います。
ファイル名を指定して実行について
「ファイル名を指定して実行」はその名の通り、ファイル名を入力して「enterキー」を押すとそのファイルを実行してくれます。
例えば、以下のように、ファイルのパスを入力してから、「enterキー」を押すとそのファイルを実行してくれます。
ファイルをコマンドで実行
特定のファイルについては、上記のようにファイルのパスを全て入力せずとも、短いコマンドで実行することが可能です。
いくつかの例を表にまとめましたので、興味がある方は試してみてください。
実行されるもの | コマンド |
メモ帳 | notepad |
電卓 | calc |
ペイント | mspaint |
Excel | excel |
Word | winword |
PowerPoint | powerpnt |
コマンドプロント | cmd |
コントロールパネル | control |
システムのプロパティ | sysdm.cpl |
C:\を開く | \ |
デスクトップを開く | Desktop |
ダウンロードを開く | Downloads |
短いコマンドで実行できるファイルを増やす
上記で短いコマンドで実行できるファイルの例を、表でまとめましたが、それ以外のファイルを短いコマンドで実行する方法が存在するので、紹介したいと思います。
まず、「Windowsキー」と「rキー」の同時押しして、「ファイル名を指定して実行」を出し、そこに「sysdm.cpl」と入力して「enterキー」を押してみてください。
すると、「システムのプロパティ」というのが開きます。
続けて、「システムのプロパティ」の「詳細設定」というタブをクリックし、その後「環境変数」という部分をクリックします。
すると、今度は「環境変数」というものが、開きます。
次に、「~のユーザー環境変数」の一覧にある「Path」(下の方にある「システム環境変数」のなかにある「Path」ではない)という部分をダブルクリックします。
パソコンの動作に関わるので、間違って他の部分をクリックしたり、削除したりしないように注意してください。
すると、「環境変数名の編集」というものが開きます。
さて、ここまで何の説明もなしに、ファイルを次々と開いていきましたが、今回重要になるのが、最後に開いた「環境変数名の編集」内に登録されているフォルダのパスになります。
なぜなら、「ファイル名を指定して実行」は、ここに登録されたパスのフォルダ内にあるファイルを、ファイル名だけで実行することが可能だからです。
例えば、先程表にまとめていたコマンドも、実は「~のユーザー環境変数」、「システム環境変数」の「Path」に登録されているフォルダの中にあるファイル名だったりします。
Pathにフォルダを登録する
では早速、「環境変数名の編集」内に自分で作成したフォルダのパスを登録し、そのフォルダの中にあるファイルをファイル名だけで呼び出せるようにしたいと思います。
まず、デスクトップなど適当な場所に新しいフォルダを作成します。
私はデスクトップに「Shortcut」というフォルダを作成しました。
次に作成したフォルダのパスをコピーします。
作成したフォルダを右クリックした後、「パスをコピー」をクリックするか、作成したフォルダを選択した後「ctrl」+「shift」+「c」のショートカットキーを押すとパスのコピーが行えます。
続いて、先ほど開いた「環境変数名の編集」の右側にある「新規」をクリックし、その後コピーしたパスを「ctrl」+「v」のショートカットなどで貼り付けます。(両端の ” は自動的に消えてくれます。)
最後に「OK」をクリックすれば、「Path」の登録は完了です。
ショートカットを作成したフォルダにいれる
次に、「Path」に登録したフォルダ内にショートカットを入れていき、「ファイル名を指定して実行」にて、短いコマンドでファイルを開けるようにしていきたいと思います。
アプリを短いコマンドで開きたい場合
アプリを短いコマンドで開きたい場合は、デスクトップにあるショートカットをコピーして、先程「Path」に登録したフォルダ内に貼り付けます。
デスクトップにショートカットがない場合は、スタートメニューを開きます。
その後、「すべてのアプリ」をクリックします。
すると、アプリの一覧が表示されるので、コマンドで開きたいアプリを探して右クリックをし、「詳細」、「ファイルの場所を開く」をクリックします。
すると、そのアプリのショートカットがあるフォルダが開くので、ショートカットをコピーして、先程「Path」に登録したフォルダ内に貼り付けます。
登録したフォルダにアプリのショートカットを貼りつけた後は、そのショートカットの名前を変更します。(後にArduino Microでこの名前を入力することになるので、半角英数字のみの名前が望ましいです。)
ここで、変更した名前がショートカット先を開くコマンドになり、「ファイル名を指定して実行」でその名前を入力するとアプリが実行できるようになります。
フォルダ、ファイルを短いコマンドで開きたい場合
フォルダ、ファイルを短いコマンドで開きたい場合は、開きたいファイルやフォルダを右クリックした後、「その他オプションを確認」をクリックします。
続いて、「ショートカットを作成」をクリックすると、ショートカットが作成されます。
ここで、作成されたショートカットを切り取った後、先程「Path」に登録したフォルダ内に貼り付けし、名前を変更します。(後にArduino Microでこの名前を入力することになるので、半角英数字のみの名前が望ましいです。)
ここで、変更した名前がショートカット先を開くコマンドになり、「ファイル名を指定して実行」でその名前を入力するとフォルダやファイルを開くことができるようになります。
Arduino Microを使ってキー入力をする
キー入力だけでファイルを実行することができるようになれば、後はArduino Microでそのキー入力を行うだけです。
今回は、以下の動画のようにタクトスイッチを押すことによって、ファイルを実行するといったことを行いたいと思います。
空のスケッチを書き込む
回路を作成する前に、空のスケッチ(「ファイル」タブの「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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
/* ArduinoMicroで操作(3,ファイル名を指定して実行); 2024/06/27 run_test スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_micro_03/ 2024/06/27 チャタリング対策のため「while (!digitalRead(keySwitches[~])) {}」の後にdelay(200)を追加しました。 2024/06/27 コメントを編集しました。 */ //ライブラリの読みこみ #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])) { run("notepad"); while (!digitalRead(keySwitches[0])) {} delay(200); } //keySwitches[1]のスイッチが押されたらArduino IDEを開く if (!digitalRead(keySwitches[1])) { run("ard"); while (!digitalRead(keySwitches[1])) {} delay(200); } //keySwitches[2]のスイッチが押されたら画像ファイルを開く if (!digitalRead(keySwitches[2])) { run("test"); while (!digitalRead(keySwitches[2])) {} delay(200); } } //**********「ファイル名を指定して実行」を開き、引数の文字列を入力して実行する関数********** void run(char text[]) { //ファイル名を指定して実行を開く Keyboard.press(KEY_LEFT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); //引数で受け取った文字列をキー入力する int i = 0; while (text[i]) { Keyboard.write(text[i]); i++; delay(10); } //「ctrl+t」のショートカットで半角英数字に変換 Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('t'); delay(100); Keyboard.releaseAll(); //「ctrl+m」のショートカットで文字の確定 Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('m'); delay(100); Keyboard.releaseAll(); //「enterキー」を入力してファイルを実行 Keyboard.write(KEY_RETURN); } |
スケッチを書き込んだ後に、キーボードの入力が勝手に行われる場合は、USBケーブルを抜いてください。
その後、回路とスケッチが間違っていないかの確認を行います。
間違って書き込んだスケッチによる操作により、修正したスケッチの書き込みが困難な場合は、対策を次の節である「スケッチの解説」にて説明していますので、先にそちらをご覧ください。
回路とスケッチが正しい場合、押したスイッチに応じてファイルが実行されます。
スイッチを押したのにファイルが実行されない場合は、回路とスケッチが間違っていないか確認をしてみてください。
スケッチの解説
暴走を止めるための文
私は「Arduino Micro」にスケッチを書き込むとき、以下のような文を書いて暴走したときの対処を行っています。
まず、スケッチの初めにある以下の文で、「pausePin」という定数を用意して暴走を止めるためのピンの番号を格納しています。
19 20 |
//USBを繋げた瞬間暴走してしまうような状態を止めるためのピンを指定 const int pausePin = 13; |
次に、「void setup()」初めに、以下の文を書くことにより、暴走を止めるためのピンがHIGHのとき空のループを行うようにしています。
24 25 26 27 28 |
//pausePinに指定したピンを入力ピンとして設定(デフォルト設定なので省略しても良い) pinMode(pausePin, INPUT); //pausePinに指定したピンがHIGHのとき空の文を無限に行い以降の文を実行しないようにする while (digitalRead(pausePin)) {} |
上記の文が正しく書き込めていれば、PCとの接続前に「pausePin」に指定したピン(上記の場合だと13番ピン)と5Vピンを接続することで、暴走を止めることができます。
上記の文の詳細や上記の文が機能しなかったときの対処法は、以下の記事で説明していますので、良く分からないという方は、是非以下の記事をご覧になってください。
スイッチを扱うための初期設定
スイッチを扱うための初期設定は以下の通りです。
まず、スケッチの初めにある以下の文により、キー入力を行うスイッチに繋がっているピンの番号を配列としてまとめています。
16 17 |
//キー入力を行うスイッチに繋がっているピンを指定 const int keySwitches[] = { 2, 3, 4 }; |
続いて、「void setup()」の中で以下のような文を記述しています。
30 31 32 33 |
//キー入力を行うスイッチに繋がっているピンをプルアップ付きの入力ピンとして設定する for (int i = 0; i < (sizeof(keySwitches) / sizeof(keySwitches[0])); i++) { pinMode(keySwitches[i], INPUT_PULLUP); } |
上記の文では、「sizeof()」を利用して配列の要素数を確認し、さらに「for文」で要素の数だけ処理を繰り返すことにより、配列にまとめた番号のピンをすべてプルアップ付きの入力ピンとして設定しています。
上記の文の詳細は、以下の記事で説明していますので、良く分からないという方は、是非以下の記事をご覧になってください。
「ファイル名を指定して実行」を行う関数
今回のスケッチでは、「ファイル名を指定して実行」を開き、引数の文字列を入力して実行する関数「run()」を作成してます。
この関数はまず、「ctrlキー」+「rキー」のショートカットで「ファイル名を指定して実行」を開いています。
66 67 68 69 70 |
//ファイル名を指定して実行を開く Keyboard.press(KEY_LEFT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); |
次に、「while文」と「Keybord.write()」を利用して、引数の文字列を一文字ずつ間隔を空けながらキー入力を行っています。
72 73 74 75 76 77 78 |
//引数で受け取った文字列をキー入力する int i = 0; while (text[i]) { Keyboard.write(text[i]); i++; delay(10); } |
この文字列を入力する処理については、前回の記事で同じようなことを行っているので、良く分からない方は、以下のリンク先の記事をご覧になってください。
文字列を入力し終わった後は、「enterキー」で実行できそうですが、入力モードが半角英数字以外になっている場合、上手く実行されません。
そこで対策として、文字列を入力する処理を行った後、「ctrlキー」+「tキー」のショートカットで半角英数字に変換、「ctrlキー」+「mキー」のショートカットで文字の確定の処理を行っています。
80 81 82 83 84 85 86 87 88 89 90 |
//「ctrl+t」のショートカットで半角英数字に変換 Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('t'); delay(100); Keyboard.releaseAll(); //「ctrl+m」のショートカットで文字の確定 Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('m'); delay(100); Keyboard.releaseAll(); |
この処理により、入力モードが半角英数字以外の場合、半角英数字の文字列に変換され、入力モードが半角英数字の場合、そのままの文字列をキープすることができます。
最後は、「enterキー」をキー入力する処理を行いファイルを実行しています。
92 93 |
//「enterキー」を入力してファイルを実行 Keyboard.write(KEY_RETURN); |
関数の実行
上記で作成した関数は、「void loop()」内にある以下のような文により、スイッチが押されたとき実行されます。
41 42 43 44 45 46 |
//keySwitches[0]のスイッチが押されたらメモ帳を開く if (!digitalRead(keySwitches[0])) { run("notepad"); while (!digitalRead(keySwitches[0])) {} delay(200); } |
ここで、関数実行の後に記述している「while文」では、スイッチが押されている間、空のループ処理を行い、長押しの際にもう一度入力が行われることや同時に他の処理が行われることを防いでいます。
また、最後の「delay(200)」はチャタリングにより、もう一度処理が行われてしまうことを防ぐために記述しています。
終わりに
皆さん、ファイルを実行させることができたでしょうか。
「Arduino Micro」によるキー入力の処理は、キーを押す、離すという単純なものですが、組み合わせによっては、今回のようにファイルを実行させるといったことができます。
また、キーボードの入力だけで、完結できるようなものであれば、今回のように処理の組み合わせによって実行させることができるので、色々とためしてみてください。
次回の記事では、Windowsの基本的なショートカットや便利なショートカットを「Arduino Micro」で実行するといったことを行いたいと思います。
本記事はここまでです。ご清覧ありがとうございました。
広告
今回の主役である「Arduino Micro」です。
まだ持っていないという方は、この機会に是非購入を検討してみてください。
「Arduino Micro」とPCと接続するためのケーブルです。
MicroBタイプのUSBケーブルが無い場合は、合わせて購入を検討してみてください。
今回使用したカラフルなスイッチのセットです。
スイッチを色で判別したいときや見た目をカラフルしたいときにおすすめです。
今回使用したコンパクトなブレッドボードとジャンパーワイヤーのセットです。
コンパクトな回路を作成する際に役立ちます。
楽天モーションウィジェットとGoogleアドセンス広告です。
気になる商品がございましたら、チェックをしてみてください。