littleBits Arduinoモジュールで特定文字のキー入力補助を行う

この記事は<a href="http://qiita.com/advent-calendar/2016/littlebits" target="_blank">littleBits Advent Calendar 2016</a>の15日目の記事です。

littleBits Arduinoモジュールで特定文字のキー入力補助をしてみます。

## しくみ

ArduinoをPCに認識させるとお気づきかもしれませんが、実は一部のArduinoボードはマウスやキーボードとしても認識されます。

実際、Arduinoのリファレンスを見るとキーボードやマウスを扱うライブラリがあります。

<a href="https://www.arduino.cc/en/Reference/MouseKeyboard" target="_blank">Arduino - MouseKeyboard</a>

littleBits Arduinoモジュールを認識させるときも、中身はArduino Leonardoなので実は同様にマウスやキーボードとしても認識されているので操作が可能です。

いままで、やりたいのにやったことがなかったのでやってみます。

## 課題

さて課題です。

突然ですが、私、自著の書籍のプロフィールにウォンバット好きと書くくらい好きでして、毎日1ウォンバットをTumblrに予約投稿すべく、いろいろなところのウォンバット写真を見て回りTumblrシェアしています。

そのときのTumblrのシェアするときの画面はこんな感じです。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/520994ad-70f7-19a6-6423-b7c8c34ad58d.png)

こちらでタイトルや写真などは自動で引き継がれるのですが**ひとつだけ手入力**の箇所があります。

それは、タグ入力。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/63eaa2f6-dab4-f135-afb7-0ed97b20f8cc.png)

いつもどこかにwombatを打ち込んでコピーペーストしているのですが、これを特定文字のキー入力補助として行えないかという実験をしてみます。

## 用意

littleBitsはこのような構成にします。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/2757ddd2-aff2-b8c6-04df-892ca7ba141b.png)

押して反応する役目のボタンモジュール、押されたかの反応をわかりやすくするLEDモジュール、Arduinoモジュールの構成でPCにつながります。

## プログラムを書いてみる

さて早速プログラムを書いてみます。

キー入力は以下の関数を使えばよいそうです。

<a href="https://www.arduino.cc/en/Reference/KeyboardWrite" target="_blank">Arduino - KeyboardWrite</a>

その上で、wombatを入力させるプログラムを書きます。

```c
#include <Keyboard.h>

void setup() {
    pinMode(A0, INPUT);
    Keyboard.begin();
}

void loop() {
  if( digitalRead(A0) == HIGH ){
    Keyboard.write('w');
    delay(10);
    Keyboard.write('o');
    delay(10);
    Keyboard.write('m');
    delay(10);
    Keyboard.write('b');
    delay(10);
    Keyboard.write('a');
    delay(10);
    Keyboard.write('t');
    delay(10);
  }
  delay(1000);
}
```

A0のポートにつながっているボタンを押せば人間ではありえない超高速で10ミリ秒でwombatと入力する仕組みです。

## 書き込んで動かしてみる

早速、書き込んでみましょう。

書き込む流れについては、わたしの記事の<a href="https://liginc.co.jp/259378" target="_blank">磁石で電子工作できる「littleBits」のArduinoモジュールでLチカしてみた（Windows・Mac） | littleBitsではじめるArduino</a>を参考に書き込みます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/520994ad-70f7-19a6-6423-b7c8c34ad58d.png)

無事書き込まれたら、Tumblrでシェアしたいウォンバット画像をシェア画面に表示しておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/e2b4b5e0-db43-f29c-495e-db913f201abb.png)

カーソルを合わせて、IMEは英語入力モードしておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/42fe8517-78f6-ee42-fb95-ddcad1b93702.png)

IMEを日本語入力モードにしてしまうと思い通りに入力されず変換候補が表示されてしまうので注意しましょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/1ea682f4-c33a-1eb7-9b4c-2810b20b2685.png)

いざ入力！

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/40d14864-a02c-323e-4aae-08ef3ff56eab.png)

うまくwombatを入力されました！

## 長押しは注意

今回は一度押してすぐ離しましたが長押しは注意です。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/c902b611-9801-3d8d-3b38-7c7e282b7d44.png)

（ウォンバットボタンらしさを出すために、以前3Dプリントしたウォンバットパネルを粘着粘土でボタン上に仕込みました）

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/b47b343c-96ca-1de1-8b75-7aaeb94f7f5a.png)

長押ししてみます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/4f142f10-02cb-fd3d-8ca4-44ff012323d1.png)

こうしてしまうと、1秒ごとにwombatがたくさん入力されてしまい、私はかまいませんが、タグを付けるという意味ではよろしくない結果になってしまいます。

## まとめ

このように、littleBitsからキーボードの入力をいじれる例を上げてみました。

今回はキーボードの入力を中心に行いましたが、もちろんマウスの操作も可能です。

<a href="https://www.arduino.cc/en/Reference/MouseKeyboard" target="_blank">Arduino - MouseKeyboard</a>

こちらみてみると、普段、人が行う操作はたいていできそうな印象です。

このように操作ができると、たとえば、Ctrl + Cのようなコピーといったショートカットキーをうまくエミュレートして、コピーするボタンをlittleBitsで作れたり、上下左右を一定時間経過するたびにシャッフルして操作のイタズラするコントローラーをlittleBitsでつくれたりと、人の操作にちょっと割り込んで便利にしたり不便にしたりする体験が可能です。

littleBits Arduinoモジュールの、ちょっと面白い使い方、是非試してみて下さい！

## 追記

当初、Arduino Unoを例にしてキーボードを使えると説明していましたが間違えで、正確にはArduino Microでした。

また、UnoのようにArduinoでも使えたり使えなかったりするため、冒頭の表現を変えさせていただきました。ひとまず、littleBits ArduinoモジュールはLeonardoベースなのでキーボード＆マウスが使えるということで、今回のTIPSは楽しめます。