第1回:Arduino・ラズパイPICOでマクロキーボード自作(1キー動作確認編)

自作マクロキーボード Arduino
ラズパイPICO搭載自作マクロキーボード
記事内には広告が含まれています。

マクロキーボード自作の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遅延を挿入して、複数回の誤入力を防ぐ
  }
}

各行の説明

  1. ライブラリのインクルード
   // 必要なライブラリをインクルード
   #include <Keyboard.h> // 標準のHIDライブラリ
  • Arduinoのキーボード機能を利用するためのKeyboardライブラリをインクルードします。このライブラリを使うことで、Arduinoをキーボードとして使用し、コンピュータにキー入力を送信することができます。
  1. 定数の定義
   // ボタンの入力ピンを定義
   const int buttonPin = 2; // ボタンが接続されているピン番号
  • buttonPinは、ボタンが接続されるデジタルピンの番号(ここではピン2)を定義します。
  1. setup関数
   void setup() {
     // ボタンピンを入力モードに設定
     pinMode(buttonPin, INPUT_PULLUP); // 内部プルアップ抵抗を有効にして入力モードに設定

     // HIDライブラリの初期化
     Keyboard.begin(); // キーボード入力を開始
   }
  • setup関数は、Arduinoが起動したときに最初に一度だけ実行される関数です。
  • pinMode(buttonPin, INPUT_PULLUP);は、buttonPinを内部プルアップ抵抗を有効にした入力モードに設定します。これにより、ボタンが押されていないときにはピンがHIGHになり、押されたときにはLOWになります。
  • Keyboard.begin();は、キーボード機能を初期化します。これにより、Arduinoがキーボードとして認識されるようになります。
  1. 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.hwrite関数を使って「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);
}

各行の説明

  1. ライブラリのインクルード
   #include <Keyboard.h>
  • Arduinoのキーボード機能を利用するためのライブラリをインクルードしています。
  1. 定数と変数の宣言
   const int buttonPin = 2;
   int buttonState = 0;
  • ボタンが接続されるピンを定義します(例: ピン2)。
  • ボタンの状態を記録する変数buttonStateを宣言します。
  1. setup関数
   void setup() {
     pinMode(buttonPin, INPUT);
     Keyboard.begin();
   }
  • setup関数では、ボタンピンを入力モードに設定し、キーボード機能を初期化します。
  1. 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関数では単一のキーのみしか送信できません。

コメント

タイトルとURLをコピーしました