第5回まででキー操作に関してはほとんどの操作ができるようになったと思います。
今回は、キーを押したときにマウスの操作ができるように新しいライブラリMouse.hを使っていこうと思います。
マウスのクリック(右、左)はもちろんですが、マウスの移動もキーで行うこともできます。
マクロキーボード・プログラマブルキーボードでマウス操作概要
Arduino Pro MicorやRaspberry Pi Picoなどを利用して、今回初のMouse.hライブラリを使用して、5つのボタンを使ってマウスを制御するスケッチのサンプルを紹介します。このスケッチでは、各ボタンが異なるマウスの動作(左クリック、右クリック、スクロール、移動)を行います。
ハードウェアの接続
- ボタン1: Arduinoのピン2に接続(GNDにプルダウン)
- ボタン2: Arduinoのピン3に接続(GNDにプルダウン)
- ボタン3: Arduinoのピン4に接続(GNDにプルダウン)
- ボタン4: Arduinoのピン5に接続(GNDにプルダウン)
- ボタン5: Arduinoのピン6に接続(GNDにプルダウン)
ソフトウェアの設定
以下のスケッチをArduino IDEにコピーして、Arduino Pro MicorやRaspberry Pi Picoなどにアップロードしてください。
#include <Mouse.h>
// ボタンのピン番号を定義
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
// ボタンの状態を追跡するための変数
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
void setup() {
// ボタンピンを入力として設定
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
// マウス機能を開始
Mouse.begin();
}
void loop() {
// ボタンの状態を読み取る
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
buttonState5 = digitalRead(buttonPin5);
// 各ボタンに応じたマウスの動作を実行
if (buttonState1 == HIGH) {
// ボタン1が押されたら、左クリック
Mouse.click(MOUSE_LEFT);
delay(200); // 押し続けないようにディレイを入れる
}
if (buttonState2 == HIGH) {
// ボタン2が押されたら、右クリック
Mouse.click(MOUSE_RIGHT);
delay(200); // 押し続けないようにディレイを入れる
}
if (buttonState3 == HIGH) {
// ボタン3が押されたら、スクロール
Mouse.move(0, 0, 1); // スクロールアップ
delay(200); // 押し続けないようにディレイを入れる
}
if (buttonState4 == HIGH) {
// ボタン4が押されたら、左に移動
Mouse.move(-10, 0); // 左に移動
delay(200); // 押し続けないようにディレイを入れる
}
if (buttonState5 == HIGH) {
// ボタン5が押されたら、右に移動
Mouse.move(10, 0); // 右に移動
delay(200); // 押し続けないようにディレイを入れる
}
}
void end() {
// マウス機能を終了
Mouse.end();
}
説明
スケッチを一行ずつ詳しく説明していきます。
#include <Mouse.h>
- #include :
Mouse.h
ライブラリをインクルードします。これにより、マウスをシミュレートする機能が利用可能になります。
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
- const int buttonPin1 = 2;: ボタン1を接続するデジタルピン番号を定数として定義します。ここではピン2に設定しています。
- const int buttonPin2 = 3;: ボタン2を接続するデジタルピン番号を定数として定義します。ここではピン3に設定しています。
- const int buttonPin3 = 4;: ボタン3を接続するデジタルピン番号を定数として定義します。ここではピン4に設定しています。
- const int buttonPin4 = 5;: ボタン4を接続するデジタルピン番号を定数として定義します。ここではピン5に設定しています。
- const int buttonPin5 = 6;: ボタン5を接続するデジタルピン番号を定数として定義します。ここではピン6に設定しています。
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
- int buttonState1 = 0;: ボタン1の状態を保存する変数を定義し、初期値を0に設定します。
- int buttonState2 = 0;: ボタン2の状態を保存する変数を定義し、初期値を0に設定します。
- int buttonState3 = 0;: ボタン3の状態を保存する変数を定義し、初期値を0に設定します。
- int buttonState4 = 0;: ボタン4の状態を保存する変数を定義し、初期値を0に設定します。
- int buttonState5 = 0;: ボタン5の状態を保存する変数を定義し、初期値を0に設定します。
void setup() {
- void setup(): Arduinoが起動したときに最初に実行されるセットアップ関数を定義します。
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
- pinMode(buttonPin1, INPUT);: ボタン1のピンを入力モードに設定します。
- pinMode(buttonPin2, INPUT);: ボタン2のピンを入力モードに設定します。
- pinMode(buttonPin3, INPUT);: ボタン3のピンを入力モードに設定します。
- pinMode(buttonPin4, INPUT);: ボタン4のピンを入力モードに設定します。
- pinMode(buttonPin5, INPUT);: ボタン5のピンを入力モードに設定します。
Mouse.begin();
- Mouse.begin();: マウス機能を初期化して開始します。
}
- }:
setup
関数の終わりを示します。
void loop() {
- void loop():
setup
関数の後に繰り返し実行されるループ関数を定義します。
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
buttonState5 = digitalRead(buttonPin5);
- buttonState1 = digitalRead(buttonPin1);: ボタン1の状態を読み取り、変数
buttonState1
に格納します。 - buttonState2 = digitalRead(buttonPin2);: ボタン2の状態を読み取り、変数
buttonState2
に格納します。 - buttonState3 = digitalRead(buttonPin3);: ボタン3の状態を読み取り、変数
buttonState3
に格納します。 - buttonState4 = digitalRead(buttonPin4);: ボタン4の状態を読み取り、変数
buttonState4
に格納します。 - buttonState5 = digitalRead(buttonPin5);: ボタン5の状態を読み取り、変数
buttonState5
に格納します。
if (buttonState1 == HIGH) {
Mouse.click(MOUSE_LEFT);
delay(200);
}
- if (buttonState1 == HIGH): ボタン1が押された(HIGH状態)かをチェックします。
- Mouse.click(MOUSE_LEFT);: マウスの左クリックを実行します。
- delay(200);: 200ミリ秒待機します。これにより、ボタンが押され続けた場合の連続クリックを防ぎます。
if (buttonState2 == HIGH) {
Mouse.click(MOUSE_RIGHT);
delay(200);
}
- if (buttonState2 == HIGH): ボタン2が押された(HIGH状態)かをチェックします。
- Mouse.click(MOUSE_RIGHT);: マウスの右クリックを実行します。
- delay(200);: 200ミリ秒待機します。
if (buttonState3 == HIGH) {
Mouse.move(0, 0, 1);
delay(200);
}
- if (buttonState3 == HIGH): ボタン3が押された(HIGH状態)かをチェックします。
- Mouse.move(0, 0, 1);: マウスをスクロールアップします。
0, 0, 1
はそれぞれX方向、Y方向、スクロール方向の移動量を示します。 - delay(200);: 200ミリ秒待機します。
if (buttonState4 == HIGH) {
Mouse.move(-10, 0);
delay(200);
}
- if (buttonState4 == HIGH): ボタン4が押された(HIGH状態)かをチェックします。
- Mouse.move(-10, 0);: マウスを左に10ユニット移動させます。
-10, 0
はそれぞれX方向、Y方向の移動量を示します。 - delay(200);: 200ミリ秒待機します。
if (buttonState5 == HIGH) {
Mouse.move(10, 0);
delay(200);
}
- if (buttonState5 == HIGH): ボタン5が押された(HIGH状態)かをチェックします。
- Mouse.move(10, 0);: マウスを右に10ユニット移動させます。
10, 0
はそれぞれX方向、Y方向の移動量を示します。 - delay(200);: 200ミリ秒待機します。
}
- }:
loop
関数の終わりを示します。
void end() {
Mouse.end();
}
- void end(): マウス機能を終了するための関数を定義します。
Mouse.end()
はマウス機能を停止します。
このスケッチでは、5つのボタンがそれぞれ異なるマウスの動作を実行するように設定されています。各ボタンの状態をチェックし、押された場合に対応するマウスの動作を実行します。
マウスとキー混合操作のスケッチ
ここまで来たら、最後の仕上げでKeyboard.hとMouse.h両方のライブラリを利用してキー操作ととマウス操作も織り交ぜて動かしてみましょう。
以下のスケッチでは、10個のキーを使用して、Mouse.h
とKeyboard.h
ライブラリを組み合わせてマウスとキーボードの複数のアクションを実行するように設定しています。
ハードウェアの接続
- ボタン1: Arduinoのピン2に接続(GNDにプルダウン)
- ボタン2: Arduinoのピン3に接続(GNDにプルダウン)
- ボタン3: Arduinoのピン4に接続(GNDにプルダウン)
- ボタン4: Arduinoのピン5に接続(GNDにプルダウン)
- ボタン5: Arduinoのピン6に接続(GNDにプルダウン)
- ボタン6: Arduinoのピン7に接続(GNDにプルダウン)
- ボタン7: Arduinoのピン8に接続(GNDにプルダウン)
- ボタン8: Arduinoのピン9に接続(GNDにプルダウン)
- ボタン9: Arduinoのピン10に接続(GNDにプルダウン)
- ボタン10: Arduinoのピン11に接続(GNDにプルダウン)
ソフトウェアの設定
以下のスケッチをArduino IDEにコピーして、Arduino Pro MicorやRaspberry Pi Picoなどにアップロードしてください。
#include <Mouse.h>
#include <Keyboard.h>
// ボタンのピン番号を定義
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
const int buttonPin6 = 7;
const int buttonPin7 = 8;
const int buttonPin8 = 9;
const int buttonPin9 = 10;
const int buttonPin10 = 11;
// ボタンの状態を追跡するための変数
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
int buttonState6 = 0;
int buttonState7 = 0;
int buttonState8 = 0;
int buttonState9 = 0;
int buttonState10 = 0;
void setup() {
// ボタンピンを入力として設定
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
pinMode(buttonPin6, INPUT);
pinMode(buttonPin7, INPUT);
pinMode(buttonPin8, INPUT);
pinMode(buttonPin9, INPUT);
pinMode(buttonPin10, INPUT);
// マウス機能とキーボード機能を開始
Mouse.begin();
Keyboard.begin();
}
void loop() {
// ボタンの状態を読み取る
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
buttonState5 = digitalRead(buttonPin5);
buttonState6 = digitalRead(buttonPin6);
buttonState7 = digitalRead(buttonPin7);
buttonState8 = digitalRead(buttonPin8);
buttonState9 = digitalRead(buttonPin9);
buttonState10 = digitalRead(buttonPin10);
// 各ボタンに応じたマウスとキーボードの動作を実行
if (buttonState1 == HIGH) {
// ボタン1: 左クリックとAキーを押す
Mouse.click(MOUSE_LEFT);
Keyboard.press('a');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('a');
}
if (buttonState2 == HIGH) {
// ボタン2: 右クリックとBキーを押す
Mouse.click(MOUSE_RIGHT);
Keyboard.press('b');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('b');
}
if (buttonState3 == HIGH) {
// ボタン3: スクロールアップとCキーを押す
Mouse.move(0, 0, 1);
Keyboard.press('c');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('c');
}
if (buttonState4 == HIGH) {
// ボタン4: 左に移動とDキーを押す
Mouse.move(-10, 0);
Keyboard.press('d');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('d');
}
if (buttonState5 == HIGH) {
// ボタン5: 右に移動とEキーを押す
Mouse.move(10, 0);
Keyboard.press('e');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('e');
}
if (buttonState6 == HIGH) {
// ボタン6: 上に移動とFキーを押す
Mouse.move(0, -10);
Keyboard.press('f');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('f');
}
if (buttonState7 == HIGH) {
// ボタン7: 下に移動とGキーを押す
Mouse.move(0, 10);
Keyboard.press('g');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('g');
}
if (buttonState8 == HIGH) {
// ボタン8: ダブルクリックとHキーを押す
Mouse.click(MOUSE_LEFT);
delay(100); // ダブルクリックの間隔をあける
Mouse.click(MOUSE_LEFT);
Keyboard.press('h');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('h');
}
if (buttonState9 == HIGH) {
// ボタン9: スクロールダウンとIキーを押す
Mouse.move(0, 0, -1);
Keyboard.press('i');
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release('i');
}
if (buttonState10 == HIGH) {
// ボタン10: 左クリックとエンターキーを押す
Mouse.click(MOUSE_LEFT);
Keyboard.press(KEY_RETURN);
delay(200); // 押し続けないようにディレイを入れる
Keyboard.release(KEY_RETURN);
}
}
void end() {
// マウス機能とキーボード機能を終了
Mouse.end();
Keyboard.end();
}
説明
- ボタン1: 左クリックとAキーを押します。
- ボタン2: 右クリックとBキーを押します。
- ボタン3: スクロールアップとCキーを押します。
- ボタン4: 左に移動とDキーを押します。
- ボタン5: 右に移動とEキーを押します。
- ボタン6: 上に移動とFキーを押します。
- ボタン7: 下に移動とGキーを押します。
- ボタン8: ダブルクリックとHキーを押します。
- ボタン9: スクロールダウンとIキーを押します。
- ボタン10: 左クリックとエンターキーを押します。
このスケッチでは、各ボタンに対してマウスとキーボードの動作を組み合わせています。ボタンが押されると、指定されたマウスの動作とキーボードのキー入力が実行されます。各ボタンの動作はカスタマイズ可能ですので用途に合わせて変更してください。
まとめ
今回でニュー入力でキーボードとマウスの操作が出来るようになりました。
今までのキー操作と今回のマウス操作を組み合わせれば、市販品より格段にカスタマイズ性に富んだマクロキーボードを自作することが出来ると思います。
今回新しく出てきたMouse.hの関数にはマウスの真ん中ボタンのクリックもあります。
その他の関数なども詳しく確認したい場合はこちらの記事をご覧ください。
コメント