マクロキーボード自作の1回目は、一つのキーだけで動作確認を兼ねて簡易的なマクロキーボード・プログラマブルキーボードを作成してみます。
まずは、配線の確認や、ArduinoIDEとの接続、スケッチのアップロード等の動作確認のためのスケッチで試してみてください。
Keyboard.hのpress関数とrelease関数
Arduino IDEで一つのキーが押された時にKeyboard.h
のpress関数とrelease関数を使って「A」を表示するスケッチです。
Keyboard.hのpress関数とrelease関数スケッチ
// 必要なライブラリをインクルード
#include <Keyboard.h> // 標準のHIDライブラリ
// ボタンの入力ピンを定義
const int buttonPin = 2; // ボタンが接続されているピン番号
void setup() {
// ボタンピンを入力モードに設定
pinMode(buttonPin, INPUT_PULLUP); // 内部プルアップ抵抗を有効にして入力モードに設定
// HIDライブラリの初期化
Keyboard.begin(); // キーボード入力を開始
}
void loop() {
// ボタンの状態を読み取る
int buttonState = digitalRead(buttonPin); // ボタンの状態を読み取る
// ボタンが押されたかどうかを確認
if (buttonState == LOW) { // ボタンが押されたとき
Keyboard.press('A'); // 'A'キーを押す
delay(100); // 短い遅延を挿入して、押しっぱなしに見えないようにする
Keyboard.release('A'); // 'A'キーを放す
delay(500); // 500ms遅延を挿入して、複数回の誤入力を防ぐ
}
}
各行の説明
- ライブラリのインクルード
// 必要なライブラリをインクルード
#include <Keyboard.h> // 標準のHIDライブラリ
- Arduinoのキーボード機能を利用するための
Keyboard
ライブラリをインクルードします。このライブラリを使うことで、Arduinoをキーボードとして使用し、コンピュータにキー入力を送信することができます。
- 定数の定義
// ボタンの入力ピンを定義
const int buttonPin = 2; // ボタンが接続されているピン番号
buttonPin
は、ボタンが接続されるデジタルピンの番号(ここではピン2)を定義します。
- setup関数
void setup() {
// ボタンピンを入力モードに設定
pinMode(buttonPin, INPUT_PULLUP); // 内部プルアップ抵抗を有効にして入力モードに設定
// HIDライブラリの初期化
Keyboard.begin(); // キーボード入力を開始
}
setup
関数は、Arduinoが起動したときに最初に一度だけ実行される関数です。pinMode(buttonPin, INPUT_PULLUP);
は、buttonPin
を内部プルアップ抵抗を有効にした入力モードに設定します。これにより、ボタンが押されていないときにはピンがHIGH
になり、押されたときにはLOW
になります。Keyboard.begin();
は、キーボード機能を初期化します。これにより、Arduinoがキーボードとして認識されるようになります。
- loop関数
void loop() {
// ボタンの状態を読み取る
int buttonState = digitalRead(buttonPin); // ボタンの状態を読み取る
// ボタンが押されたかどうかを確認
if (buttonState == LOW) { // ボタンが押されたとき
Keyboard.press('A'); // 'A'キーを押す
delay(100); // 短い遅延を挿入して、押しっぱなしに見えないようにする
Keyboard.release('A'); // 'A'キーを放す
delay(500); // 500ms遅延を挿入して、複数回の誤入力を防ぐ
}
}
loop
関数は、Arduinoが停止するまで繰り返し実行されるメインのループです。int buttonState = digitalRead(buttonPin);
で、ボタンの現在の状態を読み取り、その状態をbuttonState
に保存します。digitalRead(buttonPin)
は、ボタンが押されていればLOW
を、押されていなければHIGH
を返します。if (buttonState == LOW)
は、ボタンが押されている場合に以下のコードを実行します。Keyboard.press('A');
は、キーボードとして「A」を押します。これにより、コンピュータに「A」が入力されます。delay(100);
は、100ミリ秒の遅延を入れることで、キーが押しっぱなしに見えないようにします。Keyboard.release('A');
は、キーボードとして「A」を放します。これにより、「A」が一度だけ入力されます。delay(500);
は、500ミリ秒の遅延を入れることで、ボタンが連続して押されるのを防ぎます。これにより、誤って複数回の入力が行われるのを防ぎます。
このスケッチをArduinoにアップロードして、指定したピンにボタンを接続すれば、ボタンが押されるたびに「A」が送信されます。押されている間はキーが押しっぱなしにならず、500ミリ秒ごとに一度だけ「A」が入力されます。
Keyboard.hのwrite関数
Arduino IDEで一つのキーが押された時にKeyboard.h
のwrite
関数を使って「A」を表示するスケッチです。
Keyboard.hのwrite関数スケッチ
#include <Keyboard.h>
// ボタンの接続ピン
const int buttonPin = 2;
// ボタンの状態を記録する変数
int buttonState = 0;
void setup() {
// ボタンピンを入力に設定
pinMode(buttonPin, INPUT);
// キーボードを初期化
Keyboard.begin();
}
void loop() {
// ボタンの状態を読み取る
buttonState = digitalRead(buttonPin);
// ボタンが押されたら(HIGHの時)
if (buttonState == HIGH) {
// キーボードに「A」を送信
Keyboard.write('A');
// ボタンが離されるまで待つ(チャタリング防止)
while (digitalRead(buttonPin) == HIGH) {
delay(10); // 小さな遅延
}
}
// 少し待つ
delay(50);
}
各行の説明
- ライブラリのインクルード
#include <Keyboard.h>
- Arduinoのキーボード機能を利用するためのライブラリをインクルードしています。
- 定数と変数の宣言
const int buttonPin = 2;
int buttonState = 0;
- ボタンが接続されるピンを定義します(例: ピン2)。
- ボタンの状態を記録する変数
buttonState
を宣言します。
- setup関数
void setup() {
pinMode(buttonPin, INPUT);
Keyboard.begin();
}
setup
関数では、ボタンピンを入力モードに設定し、キーボード機能を初期化します。
- loop関数
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
Keyboard.write('A');
while (digitalRead(buttonPin) == HIGH) {
delay(10);
}
}
delay(50);
}
loop
関数では、ボタンの状態を読み取り、ボタンが押されたときにKeyboard.write('A')
で「A」を送信します。- ボタンが押されたままの状態(チャタリング)を防ぐため、ボタンが離されるまでループして待機します。
- 最後に、小さな遅延を入れて次のループへ進みます。
このスケッチをArduinoにアップロードして、指定したピンにボタンを接続すれば、ボタンが押されるたびに「A」が送信されるようになります。
第1回のまとめ
無事に動作確認できましたか?上手くいかないときはピン番号やジャンパコードの接続を確認してみてください。
動作確認にはメモ帳などを開いて、キースイッチを押してみてください。Aとタイプされれば成功です。
press関数とrelease関数を使ったパターンと、write関数を使ったパターンをご紹介しました。
最後に、2つのパターンの使い分けをざっくり説明します。
press関数とrelease関数
Press関数はrelease関数が呼ばれるまで、ボタンは押しっぱなしの状態になります。
ゲーム用の左手デバイスなどのボタンにはこちらの関数を使います。
write関数
キーを押した時点で1回だけ設定されたキーを送信する
マクロキーボードなど一般的なキー操作にはこちらの関数を使います。
※write関数では単一のキーのみしか送信できません。
コメント