Seeeduino XIAOを使ってマウスを作ります。
リンク
今回作るのは、
一定時間ごとにマウスを動かすフリーソフト「マウスふるふる」のハードウェア版。
無操作時間が続いたときにPCがスリープに入るのを防ぎます。
本家の「マウスふるふる」をダウンロードすればいいじゃん、
というのは置いておいて。
Arduinoでマウスが作れるライブラリ探し
簡単にマウスが作れそうなライブラリを探します。
HIDデバイス (Human Interface Device) 用のライブラリをいくつか試してみて、
使いやすそうだなと思ったのがこちら。
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() {
}
実行されるとマウスが動いたり画面がスクロールされたり、
左右のクリックがされたり。ドラッグ&ドロップもできるみたいです。
プログラムを作る
サンプルコードを参考にしてプログラムを作ります。
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の操作も違和感なく行えています。
コメント