Seeeduino XIAO | マウスふるふるを作る

Seeeduino XIAOを使ってマウスを作ります。


今回作るのは、
一定時間ごとにマウスを動かすフリーソフト「マウスふるふる」のハードウェア版。
無操作時間が続いたときにPCがスリープに入るのを防ぎます。

本家の「マウスふるふる」をダウンロードすればいいじゃん、
というのは置いておいて。

スポンサーリンク

Arduinoでマウスが作れるライブラリ探し

簡単にマウスが作れそうなライブラリを探します。
HIDデバイス (Human Interface Device) 用のライブラリをいくつか試してみて、
使いやすそうだなと思ったのがこちら。

TinyUSB Mouse and Keyboard library

TinyUSB Mouse and Keyboard Library

[↓ Code] のボタンから [Download ZIP] を選択してダウンロードし、

Arduino IDEの
スケッチライブラリをインクルードZIP形式のライブラリをインストール
からインストールします。

サンプルコードを試す

上記でインストールしたライブラリのスケッチ例から「TinyUSB_Mouse_Test」を試します。
コードは何も変更せずにコンパイルしてSeeeduino XIAOに書き込みました。

/*
 * Sample program demonstrating TinyUSB_Mouse_and_Keyboard.h module which
 * auto selects between standard Arduino Mouse.h API and TinyUSB mouse API.
 * This program tests the mouse portion alone.
 */

//Include this module whether using Arduino stack or TinyUSB stack
#include <TinyUSB_Mouse_and_Keyboard.h>

void Status (void) {  //prints out mouse button status
  Serial.print("Mouse Buttons: Left:"); Serial.print(Mouse.isPressed(MOUSE_LEFT),DEC);
  Serial.print(" Right:"); Serial.print(Mouse.isPressed(MOUSE_RIGHT),DEC);
  Serial.print(" Middle:"); Serial.println(Mouse.isPressed(MOUSE_MIDDLE),DEC);
}

void setup() {
  Mouse.begin();  //Unlike Arduino Mouse.h, you must use "begin" method.
  Serial.begin(115200);
  while (! Serial)delay (1);
  Serial.println("USB mouse test");
  Mouse.click(MOUSE_LEFT);delay(1000);  //do a click
  Mouse.move(50,0);delay(1000);         //movie in all four directions
  Mouse.move(0,50);delay(1000);
  Mouse.move(-50,0);delay(1000);
  Mouse.move(0,-50);delay(1000);
  Mouse.move(0,0,-5);delay(1000);       //scroll down and up
  Mouse.move(0,0,5);delay(1000);
  Mouse.press(MOUSE_LEFT);delay(1000);  //hold the left button
  Mouse.move(50,0,0); delay(1000);      //drag
  Mouse.release(MOUSE_LEFT);delay(1000);//release the button
  Mouse.click(MOUSE_RIGHT);delay(1000); //try a right click
  Mouse.move(-30,-30); delay(1000);     //move away from the right-click menu that popped up
  Mouse.click(MOUSE_LEFT);delay(1000);  //do a left click to clear the pop-up
  Status();                             //print the buttons status
  Mouse.press(MOUSE_LEFT); delay(1000); //press each button, print status, then release all
  Status();
  Mouse.press(MOUSE_RIGHT); delay(1000);
  Status();
  Mouse.press(MOUSE_MIDDLE); delay(1000);
  Status();
  Mouse.release(MOUSE_ALL); delay(1000);
  Status();
  Mouse.move(-30,-30); delay(1000);     //move slightly to clear the pop-up
  Mouse.click(MOUSE_LEFT);delay(1000);  //clear of the pop-up
  Serial.println("Test completed");
};
void loop() {
}

実行されるとマウスが動いたり画面がスクロールされたり、
左右のクリックがされたり。ドラッグ&ドロップもできるみたいです。

Arduino IDEシリアルモニタ
シリアルモニタの表示

プログラムを作る

サンプルコードを参考にしてプログラムを作ります。

1秒に1回、50ピクセル動かす

#include <TinyUSB_Mouse_and_Keyboard.h>

void setup()
{
  Mouse.begin();
}

void loop()
{
  delay(1000);
  Mouse.move(50, 0);
  delay(1000);
  Mouse.move(-50,0);
}

実行すると左右にマウスが勝手に動くようになりました。
しかし50ピクセルも動かれると、まともにPC操作ができません。

1分に1回、1ピクセル動かす

#include <TinyUSB_Mouse_and_Keyboard.h>

void setup()
{
  Mouse.begin();
}

void loop()
{
  delay(60000);
  Mouse.move(1, 0);
  delay(60000);
  Mouse.move(-1,0);
}

マウスを動かす量は1ピクセル、時間も1分に1回に変更しました。
1ピクセルならマウスが勝手に動いてもほぼ気づきません。
通常のPCの操作も違和感なく行えています。

コメント

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