ENGINEER BLOG

ENGINEER BLOG

Arduino LeonardoのHID機能を試す

こんにちは、コンサルティングサービス本部の朝日です。

今回は、Arduino LeonardoのUSBキーボード/マウス機能を試してみました。

環境

  • Arduino Leonardo
  • Arduino IDE 1.8.2

準備

  • Arduino IDEをダウンロード&インストールする

  • 稼働確認

ArduinoとPCをUSBで接続した後、Arduino IDEからプログラムを書き込みます。

ファイル→スケッチ例→01.Basics→Blinkを開いて、「マイコンボードに書き込む」で書き込みが終われば「L」のLEDが点滅するはずです。
 (私の環境では最初から「L」が点滅していたので、一回空のスケッチを書き込んで点滅が止まったのを確認してからやってみました)

led

キーボード機能のテスト

IDEのサンプルよりもっとシンプルなモノで確認してみました。

#include "Keyboard.h"

void setup() {
  pinMode(2, INPUT_PULLUP);
  Keyboard.begin();
}

void loop() {
  while (digitalRead(2) == HIGH) {
    delay(500);
  }

  Keyboard.print("Hello World!\n");
  delay(3000);
}

繋がっているPCのマウスやキーボードの入力とかち合ってしまって、下手すると止められなくなってしまうので、2番ピンとGNDをジャンパワイヤで繋いだ時に動作するようにしています。

2ndpin

ソースから普通に予想できますが、メモ帳の上で作動させるとこんな感じになります。

keyboardsample

マウス機能のテスト

キーボードと同様にマウスの方も簡単なサンプルを作ってみます。

#include "Mouse.h"

#define rad(x) ((float)x)/180*PI

long a1 = 0;
long a2 = 0;
int r = 100;

void setup() {
  pinMode(2, INPUT_PULLUP);
  Mouse.begin();
}

void loop() {
  while (digitalRead(2) == HIGH) {
    delay(500);
    a1 = 0;
    a2 = 0;
  }

  Mouse.press(MOUSE_LEFT);
  Mouse.move(sin(rad(a1 + a2)) * r, cos(rad(a1 + a2)) * r);

  a1 += 90;
  if (a1 >= 360) {
    a1 = 0;
    a2 += 10;
  }

  delay(500);
}

キーボードの時と同じく、2番ピンで動作を制御しています。
 ペイントツールの上で実行するとこんな感じになります。

mousesample

ちなみに、Mouse.move()はx,yの引数がsigned charなので、-128~127しか指定できません。 もっと移動させたいときは複数回に分けるって事ですかね。

その他

  • スマホ(android)のUSBから電源供給されてArduinoが動くか?→OK

  • 逆に、ArduinoにACアダプタで電源供給して、USBに繋がっているスマホに充電できるか?→NG

スマホに繋ぎっぱなしで電池を気にしないでマクロ動作とかできるかなーと思ったのですが、できなさそうです。

また、あくまでキーボード、マウスの機能しか無いので画面内容に応じて動作を変えるとかはできません。

カメラで画像認識して制御させるとか一工夫してみたいですね。

今回は簡単ですがこんなところで。