バクフーンのブログ

スイッチの同時操作を楽しもう

同時操作完成までの道のりをざっくりと

こんにちは。今回は私が同時操作を完成させるまでの話になります。

ゼロから同時操作を始める手順の解説ではないです。

マイコンに出会うまで

色違いのポケモンが欲しい。なら、同時操作しよう。というわけで適当にググったところ、同時操作する黒い箱?をメルカリで販売している人を見つけました。
つまり、技術的に可能なのです。よかった。

さらに調べるとマイコンを使って自動でスイッチを操作することができるらしい。なら、同時操作もできるんじゃないかと思い、そっち方面を調べてみることにしました。

aliexpressとの紛争

まずは自動化できるようにならなきゃなと、こちらの記事を参考に、導入しました。

pokemonit.com

github.com

arduino Leonardoをaliexpressで2個購入したのですが。

1つしか届きませんでした!

結局、店と英語で連絡を取り合い返金してもらいました。皆さんもアリエクは気を付けてくださいね。クレカもペイパル経由とかにしたほうがいいです。絶対。

9個のタクトスイッチ

私は、スイッチAがオンになったらAボタンを押し、数字をSerial.writeするというプログラムを親機に、1という数字をSerial.readしたらAボタンを押すというプログラムを子機に書き込めば同時操作できるのではないかと思い、まずは大マックスアドベンチャーができる最低限のボタンで試してみました。
具体的には、十字キーとABXY、HOMEボタンです。

それはそれは面倒でした。
しかし甲斐あって成功しました。やったね。

次回は具体的な配線などをちゃんと説明します。
題名は「実際に同時操作を作る」です。それでは。

実際に同時操作を作る - バクフーンのブログ

おまけ

プログラムを置いておきます。

親機

#include <NintendoSwitchControlLibrary.h>
#define sa 13
#define sb 12
#define sx 11
#define sy 10
#define su 9
#define sd 8
#define sr 7
#define sl 6
#define sh 5

void setup(){
  pinMode(sa,INPUT);
  pinMode(sb,INPUT);
  pinMode(sx,INPUT);
  pinMode(sy,INPUT);
  pinMode(su,INPUT);
  pinMode(sd,INPUT);
  pinMode(sr,INPUT);
  pinMode(sl,INPUT);
  pinMode(sh,INPUT);
  Serial1.begin(9600);
}
void loop(){
  int a=1;
  a=digitalRead(sa);
  if(a==LOW){
    Serial1.write(13);
    pushButton(Button::A);
  }
  a=digitalRead(sb);
  if(a==LOW){
    Serial1.write(12);
    pushButton(Button::B);
  }
  a=digitalRead(sx);
  if(a==LOW){
    Serial1.write(11);
    pushButton(Button::X);
  }
  a=digitalRead(sy);
  if(a==LOW){
    Serial1.write(10);
    pushButton(Button::Y);
  }
  a=digitalRead(su);
  if(a==LOW){
    Serial1.write(9);
    pushHat(Hat::UP);
  }
  a=digitalRead(sd);
  if(a==LOW){
    Serial1.write(8);
    pushHat(Hat::DOWN);
  }
  a=digitalRead(sr);
  if(a==LOW){
    Serial1.write(7);
    pushHat(Hat::RIGHT);
  }
  a=digitalRead(sl);
  if(a==LOW){
    Serial1.write(6);
    pushHat(Hat::LEFT);
  }
  a=digitalRead(sh);
  if(a==LOW){
    Serial1.write(5);
    pushButton(Button::HOME);
  }
}

子機

'''

#include <NintendoSwitchControlLibrary.h>
void setup(){
  Serial1.begin(9600);
   pushButton(Button::B, 500, 5);
}
void loop(){
  while(Serial1.available()>0){
    byte Signal = (byte)Serial1.read();
    if(Signal==13){
      pushButton(Button::A);
      }else
    if(Signal==12){
      pushButton(Button::B);
      }else
    if(Signal==11){
      pushButton(Button::X);
      }else
    if(Signal==10){
      pushButton(Button::Y);
      }else
    if(Signal==9){
      pushHat(Hat::UP);
      }else
    if(Signal==8){
      pushHat(Hat::DOWN);
      }else
    if(Signal==7){
      pushHat(Hat::RIGHT);
      }else
    if(Signal==6){
      pushHat(Hat::LEFT);
      }else
    if(Signal==5){
      pushButton(Button::HOME);
      }
  }
}

'''