Arduinoを用いたポケモン剣盾のリーグ周回自動化

#概要
Arduinoを用いたリーグ周回自動化のプログラムを作成しました
おおよそ8分30秒で周回することが可能で，効率的にガンテツボールやかえんだま等を集められます

#きっかけ
・[ワット稼ぎを自動化する記事](https://qiita.com/sobassy/items/cb707e50f2f27a851886)をみて，リーグ周回自動化に応用できそうだと感じた
・マクロコンを買うより安上がりだった

#準備
・Arduino Leonardもしくはその互換機
　[これ](https://www.amazon.co.jp/KeeYees-Micro-ATmega32U4-Arduino%E7%94%A8-%E4%BA%92%E6%8F%9B%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9/dp/B07Q5XFPXC/ref=pd_rhf_dp_p_img_8?_encoding=UTF8&psc=1&refRID=JQYJGP20CG45GPY37BS3)とか　安いものなら一個およそ900円程度
・typeAオス-typeCオスのケーブル
　switchとArduinoを接続するために必要

#環境構築
##Arduino IDEのインストール
　[公式サイト](https://www.arduino.cc/en/Main/Donate)から**JUST DOWNLOAD**してインストール
##switch操作用ライブラリのインストール
　[このページ](https://github.com/celclow/SwitchControlLibrary)で，**clone or download** から**Download ZIP** を選択し保存する
　ファイルを解凍し，SwitchControlLibrary-masterを`[Arduinoがインストールされたディレクトリ]/libraries`に配置する
##boards.txtの編集
・`[Arduinoがインストールされたディレクトリ]/hardware/arduino/avr/boards.txt`を開き，285,286行目を以下のように変更する

```
leonardo.vid.1=0x0f0d
leonardo.pid.1=0x0092
```

・また，311,312行目を以下のように変更する

```
leonardo.build.vid=0x0f0d
leonardo.build.pid=0x0092
```

#自動化の手順
##Arduino IDEの準備
・usbケーブルを用いてArduinoをpcに接続する
・Arduino IDEを起動し，ツール→ボードからArduino Leonardを選択，シリアルポートはArduinoを接続したポートを選択する

##スケッチの書き込み
　作成したスケッチを以下に記す

```c++
#include<SwitchControlLibrary.h>


void setup() {
  // put your setup code here, to run once:
  //コントローラーを認識させるための処理。LR連打してるだけ
  SwitchControlLibrary().PressButtonR();
  delay(50);
  SwitchControlLibrary().ReleaseButtonR();
  delay(500);
  SwitchControlLibrary().PressButtonL();
  delay(50);
  SwitchControlLibrary().ReleaseButtonL();
  delay(500);
  SwitchControlLibrary().PressButtonR();
  delay(50);
  SwitchControlLibrary().ReleaseButtonR();
  delay(500);
  SwitchControlLibrary().PressButtonR();
  delay(50);
  SwitchControlLibrary().ReleaseButtonR();
  delay(500);
  SwitchControlLibrary().PressButtonL();
  delay(50);
  SwitchControlLibrary().ReleaseButtonL();
  delay(500);
  SwitchControlLibrary().PressButtonR();
  delay(50);
  SwitchControlLibrary().ReleaseButtonR();
  delay(2000);
  // 斜め上入力しっぱなし
  SwitchControlLibrary().MoveLeftStick(158,256); 
}

void loop() {
  // put your main code here, to run repeatedly:
  //7回A,1回Bの繰り返し
  SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
  delay(500);//1
  SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
  delay(500);//2
   SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
  delay(500);//3
  SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
  delay(500);//4
  SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
  delay(500);//5
  SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
  delay(500);//6
  SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
  delay(500);//7
  SwitchControlLibrary().PressButtonB();
  delay(50);
  SwitchControlLibrary().ReleaseButtonB();
  delay(500);//B
}
```

　このコードを書き込むことで自動化を行えます
##実行
・剣盾を起動し，リーグの受付の目の前にいる状態にしておく
・スケッチを書き込んだArduinoをケーブルを用いてswitchに接続することで自動でリーグ周回を行うことができる
#補足
・delayの値は適当なので各自で調整してください
・ボタンを押す間隔を0.5秒にしているが，もっと短くすれば一周にかかる時間を短くすることが可能，ただしどの程度まで大丈夫かは不明
・setup中のLRボタンを押す回数が何回以上ならいいかは未調査，もっと少なくてもよさそう

#おわりに
switch自動化に関する記事が増えてきたため，比較的簡単に実装することができた
今後は，孵化厳選の自動化などに挑戦していきたい