水. 4月 24th, 2024

おはようございます、アザリままみです^^

前投稿「ポケモンスカーレットバイオレット自動化07ハードウェア編(後編)

に続き、マイコンArduinoLeonardoを用いてポケモンスカーレットバイオレットの面倒な手作業を自動化するコラムです。

今までの記事で、学園戦の連戦、ランダムレイド連戦、オークションと無限に繰り返す処理を自動化し、わたしのハードウェア構築について解説しました。

前記事で押しボタンや数値を渡すためのディップスイッチを組み込みましたので、本記事でその使い方を説明します。

参考にサンプルのスケッチを載せておきます。

KKHMF 2個 Leonardo Pro Micro ATmega32U4 5V/16MHz ブートローダ マイクロ USB Pro Mini 開発ボード Arduinoに対応

価格:3,604円
(2022/12/17 23:27時点)
感想(0件)

押しボタンの使い方

ポケモンを自動化する、と一口に言っても様々な機能を自動化してきており、色違い孵化厳選では、卵を手に入れる機能や卵を孵化させる機能、不要なポケモンを逃がす機能などいくつもの機能を使い分ける必要があります。

よくみられるポケモン自動化の方法では、マイコンを複数用意してそれぞれ使い分けるか、毎回スケッチを書き込む必要があります。

わたしのハードとスケッチを用いれば書き換える必要も使い分ける必要もなく、一つのハードでボタンで機能を選択して実行することができます。

回路としては単純で、「ポケモンスカーレットバイオレット自動化07ハードウェア編(後編)」に載せているとおり、押しボタンはProMicroのデジタル入力端子に電圧を直接送るだけになります。

ただし、”入力なし”は”0V”ということではなく、不安定な電圧となりますので、ProMicroに内蔵されているプルアップ抵抗を用いてデフォルトで5Vを印加し、押しボタンが押されたときに0V(G)を渡すことで押された状態を判別し、機能を実行します。

今までの記事で作成したスケッチ等はそのボタンが判定されたところで呼び出すことになります。

次にスケッチの解説です。

セットアップした際に、

pinMode( 8, INPUT_PULLUP );

このようにデジタル入力ピンをプルアップで使用するよう定義します。

それからループ内で、

value1 = digitalRead( 8 );//button1

このように電圧を受け取ります。

それから、

if(value1 == LOW){//1押されたとき

}

このように条件分岐をすることでボタンが押された判定をし、所定の処理を実行させます。

毎回ループでintしないよう外で宣言してください。

載せているサンプルでは、押しボタンは3つしかないため、3ポジションのディップスイッチの上二桁で0~3で使い分け、12の機能をボタンプッシュで実行できるようにしております。

uxcell タクトスイッチ SPST 2ピン モーメンタリ 基板実装 電気部品 50個入り

価格:601円
(2022/12/17 23:29時点)
感想(0件)

ディップスイッチの使い方

今回の孵化厳選では、卵を産ませるのがピクニックでサンドイッチを食べさせ待機する、という方法です。

サンドイッチの効果は30分間ですので、それを何度繰り返すのか指定できると便利です。

また、ボックス内の卵を孵化させるのも、何ボックス孵化させるのか指定したいし、

不要なポケモンも何ボックス分逃がすか指定できる必要があります。

そこで押しボタンと同じなのですが、デジタル入力ピンをプルアップしておいてグランドを渡すことでディップスイッチから数値を渡せるようにします。

ディップスイッチの各ポジションを二進数で、1,2,4,8,16とし、入力されている際に該当の数値を足すことで数値を渡します。

前記事のようにロータリ式ディップスイッチを用いればいちいち計算せずに、また小さいスイッチを上げたり下げたりせずにすみます。

参考に載せるサンプルでは、ロータリ式スイッチが0~15という範囲のため、付加している3ポジションの下一桁を+16として扱い、0~31までの数値を渡せるようにしてあります。

ロータリ式スイッチも回路上はただのディップスイッチですので、数値を得るには次のように関数を用いています。

//Valueディップスイッチを取得する
void get_dip(){
dipnum = 0;
if(digitalRead( 4 ) == LOW){
dipnum = dipnum + 1;
}
if(digitalRead( 5 ) == LOW){
dipnum = dipnum + 2;
}
if(digitalRead( 6 ) == LOW){
dipnum = dipnum + 4;
}
if(digitalRead( 7 ) == LOW){
dipnum = dipnum + 8;
}
if(digitalRead( 14 ) == LOW){
dipnum = dipnum + 16;
}
}

uxcell DIPスイッチ 回路基板適用キースイッチ 3ポジション 9×10 x10 mm 5入り レッド

価格:305円
(2022/12/17 23:29時点)
感想(0件)

サンプルファイルについて

参考にサンプルのスケッチを載せておきます。

別の投稿にて解説しようと思いますが、OLED液晶の制御も入っております。

ハード上組み込んであり、液晶からの戻りを受け取らないと進まないためそのままご使用ください。

コードを見ればなんとなくわかると思います。

また、ボタン操作による機能切り替えが前に使っていたダイヤモンドパールリメイクの自動化では12機能では足りなかったため、通常使用しないディップ値0の時にも別の機能が使えるようなコードとなっておりますので、ご注意ください。

おわりに

今回はハードウェアに追加したボタンの使い方とコードについて解説しました。

あとは液晶について軽く説明したら、色違い孵化厳選自動化に移りたいと思います。

次の記事は「ポケモンスカーレットバイオレット自動化09状態を表示するディスプレイの実装」になります。

ポケモン自動化の一連の投稿は、タグやカテゴリか、

各記事へのリンクを貼っている、

ポケモンスカーレットバイオレット自動化01概要

をご参照ください。

.inoファイル

アップロードの都合上docファイルになっておりますので、.inoファイルにしてご使用ください。


By azariままみ

映画、ドラマ、ゲーム、電子工作、、そのほか わりと多趣味です

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です