新型の Arduino（Arduino Uno R4 Minima）を入手したので HID を早速試す！ 【キーボード・マウスとして動かす】

## はじめに
Arduino の新型「Arduino Uno R4 シリーズ」が出て、日本では「Arduino Uno R4 Minima」の発売が開始されました。

自分は、[スイッチサイエンスさんのサイト](https://www.switch-science.com/products/9000)で購入し、それが手元に届きました。
※ [秋月電子さんのサイト](https://akizukidenshi.com/catalog/g/gM-18114/)でも販売され始めたようです

https://twitter.com/youtoy/status/1673883291429257222

早速、Arduino Uno R4 Minima を使ってみようと思います。今回、旧版にはなかった機能の 1つ「HIDサポート」を試します。

## 公式ドキュメントを見てみる
ドキュメントなどに関して、スイッチサイエンスさんの販売サイトに、公式ページなどへのリンクが掲載されています。
![公式のドキュメントなどへのリンク](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/68413864-a15e-0dbf-1fba-719e85e925bf.png)

個人的に気になるのは、スタートガイドと HID の 2つです。

### スタートガイド
スタートガイドのほうは、以下のページにリンクされています。

●Getting Started with Arduino UNO R4 Minima | Arduino Documentation
　https://docs.arduino.cc/tutorials/uno-r4-minima/minima-getting-started

ガイドに掲載されている手順は、シンプルに「IDE のインストールとボードマネージャーでのボードの追加」の 2つです。

### HID について
HID に関するドキュメントは、以下へリンクされています。

●Arduino UNO R4 Minima USB HID | Arduino Documentation
　https://docs.arduino.cc/tutorials/uno-r4-minima/usb-hid

内容は、Arduino Uno R4 Minima をキーボード・マウスとして振る舞わせる方法で、こちらもシンプルな内容です。

## 実際に試してみる
### スタートガイドの内容で準備を進める
#### IDE の準備
Arduino IDE をインストールしてない方は、[公式の「Software」のページ](https://www.arduino.cc/en/software)からダウンロード・インストールを行ってください。

自分は、Arduino IDE 2.1.0 がインストール済みなので、それを使っていきます（※ 環境は Mac です）。

#### ボードの追加
IDE で、以下の赤矢印で示した部分を選び、検索用のテキストボックスに「uno r4」などのキーワードを入力します。
![ボードの追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0f63591a-93c5-fcbf-41d5-48d2783fb750.png)
そして、「Arduino Uno R4 Boards」が出てくるので、それをインストールします。

#### ボード・ポートの選択
ボードの追加が完了したｒ、ボード・ポートを IDE の左上のプルダウンメニューから設定します。
![ボード・ポートの選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/01db2b36-f95d-caca-f23a-7d46a359d98c.png)
これで準備は完了です。

### HID をを使ったサンプルを試す
Arduino Uno R4 Minima に搭載された「HIDサポート」を試してみることにします。

#### 元にするサンプル
上で掲載したサンプルで、キーボードかマウスのどちらかの動きをさせるコードが出てきていたのですが、自分の何らかの入力に反応してキーボード・マウスの動きをするものを試すことにします。具体的には、以下のサンプルを使います。

●Keyboard Serial | Arduino Documentation
　https://docs.arduino.cc/built-in-examples/usb/KeyboardSerial

上記サンプルを選んだ理由は、「ボード単体で試すことができて、なおかつボードへの外部入力に対してキーボード・マウスの処理を実行させることができる」ためです（※ とりあえずのお試しに、電子工作パーツを取り出してくるのが面倒だったとも言う...）。

上記のサンプルは、シリアル通信で「a」という文字を送ると「その次の文字 b」のキー入力が行われたりするものです（※ 次の文字というところは、実装的に以下となっています）。
![キー入力を返す部分](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ff1ddbec-2d25-6bea-c62b-4198da10df13.png)

#### サンプルに少しだけ手を加える
このサンプルの処理に、マウスカーソルを動かす処理を付け加えてみることにします。

具体的には以下のとおりで、冒頭の `#include "Mouse.h"` と下から 3行目の `Mouse.move(5, 0);` を追加しています。

```cpp
#include "Keyboard.h"
#include "Mouse.h"

void setup() {
  Serial.begin(9600);
  Keyboard.begin();
}

void loop() {
  if (Serial.available() > 0) {
    char inChar = Serial.read();

    Keyboard.write(inChar + 1);
    Mouse.move(5, 0);
  }
}
```

#### 動作確認
上記をコンパイルしてボードに書き込み、動かして見た時の様子を動画で示します。

最初に「1」をシリアル通信で送ると、「2」が入力されて、それと合わせてマウスカーソルが少し右へ移動します。さらに、キー入力されたものをシリアル通信で送ると、数字は「3⇒4⇒5⇒...」とカウントアップしていき、マウスカーソルもどんどん右へと動いていきます（すごく地味なのですが...）。

https://twitter.com/youtoy/status/1674022217846497280

シリアル通信経由の入力に対して、Arduino Uno R4 Minima がキーボード・マウスの操作の処理を行っていることが確認できました。

## おわりに
今回、入手したばかりの Arduino Uno R4 Minima の、HIDサポートを試しました。

Arduino Uno R4 Minima は、Arduino Uno R3用のシールドなどがそのまま使えるようなので（※ 全てではないかも？）、自分が既に持っているシールドなどとの組み合わせを試せればと思います。