Qiita初投稿です。拙い部分は目をつぶっていただけると幸いです・・・
これは何
1秒に一回、「w」キーを押すデバイスを作りました。
amazonで買ったdigisparkクローンとArduino IDEを用いました。
何故作ったのか
私、某PCとかを売るお店で店員をしています。
そのお店の展示用PCでFPSゲームのデモをしているのですが、練習モードで放置しているとホーム画面に戻されてしまい、そこからオンライン対戦につなげる不届き者お客さんがあとを絶たないのです。ちゃんと注意喚起してるのに・・・。
まぁ放置判定を回避すればいいじゃない、とマウスジグラーを試したのですが、まぁFPSなんで致命的に合わないんですよ。
AIMがブレるブレるでもう大変。お試しどころの騒ぎじゃなくてこりゃだめだとなりました。
マウスがだめならキーボードのジグラーって無いの?となり、探すもそれっぽい商品がなく。
そういやArduino触りたい欲があるな・・・となると
作っちゃえばいいじゃない
ということでキーボードジグラー(?)を自作することにしました。
とりあえずArduino IDEでイジれてちっこくて安いやつを探すことに。
どうもdigisparkなるものがあって、直接USBにぶっ刺せるらしい。
本家はもう手に入らないらしいのでクローン品を購入↓
ちっこくてかわいいね。んで1200円だから安いね。
コード等の作成にはこの記事↓と公式docを参考にしました。偉大なる先人の知恵に感謝・・・
IDEはおなじみのArduino IDEバージョンは一番新しい2.3.2を使いました。ボードマネージャーとしてATTinyCoreを、キーボード用ライブラリとしてAdafruit-Trinket-USBの中にあるTrinketKeyboardライブラリを圧縮して追加して使用。
記述したコードはこんな感じ。
#include <TrinketKeyboard.h>
int i;
int setCount = 1000; //待機時間(ms)
void setup() {
TrinketKeyboard.begin(); //start USB stuff
}
void loop() {
if(i % 10 == 0)
{
TrinketKeyboard.poll(); //10ms事に実行しないとバグるらしい
}
if(i % setCount == 0)
{
//Wを押す。TrinketKeyboard.h内に他キーのコードの記載あります。
TrinketKeyboard.pressKey(0,KEYCODE_W);
}
if(i % (setCount+20) == 0) //待機時間(20ms)
{
TrinketKeyboard.pressKey(0, 0); //キーを全部離す
i = 0; //カウンタリセット
}
delay(1);
i++;
}
IDE側の準備としてATTinyCoreを導入する。導入は下記の記事がわかりやすいです!
ATTinyCoreを導入後、ボード選択でATtiny85 (Micronucleus / DigiSpark)を選択して書込。
実行後、コンソールに
Please plug in the device (will time out in 60 seconds) ...
と記載が出たらDigiSparkを接続。すると書込が始まります。
>> Micronucleus done. Thank you!
と出たら書込終了です。お疲れ様でした。
出来上がりの品
↑メモ帳での動作 ↓Krunker.ioというブラウザFPSでの動作(観戦者モードにて)
この様に、1秒に一回、20ミリ秒だけWキーを長押しするデバイスが出来ました。
実際に使う際は3分に一回くらい(1800000ms)に値を設定するといい感じになると思います。
これがあれば店内巡るタイミングで毎回練習モード入れなくて済みそう!やった~~~!
DigiSparkの仕様上、起動時にラグがあるらしいのですが、1秒立たずに立ち上がってくれるので、まぁ許容範囲かなと思います。
次は何作ろうかなぁ。本家Microも買ったので、自作キーボードとか作ってみようかな。
以上、キーボードジグラーを作ったお話でした。