MENU

Nintendo Switch用のエフェクトーンをもう少し作り込んでみる

前に自作したエフェクトーンですが、Nintendo Switchへの組み込みが個人的には結構気に入ってしまいました。そうなると、ブレッドボードのままで後ろに貼り付けておくのもどうかなあと思いましたので、もう少し綺麗に作り込んでみることにしました。なお、今回は時間の都合で簡易更新になります。

紆余曲折した結果、こんな感じになりました。

スピーカーは小型なものに変えて、マイコンもTrinket ProからTrinket (5V)に変更しました。

それから、Swith本体のIN/OUTで異なる音声が鳴るようにして、5段階で音量を変更できるようにもしてみました。一応ソースコードはこんな感じです。

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>

#define IN_SOUND   1
#define OUT_SOUND  2

#define VOLUME_1   10
#define VOLUME_2   15
#define VOLUME_3   20
#define VOLUME_4   25
#define VOLUME_5   30

#define OPEN_CLOSE_PIN  0
#define LED_PIN         1
#define VOLUME_PIN      2

SoftwareSerial mySerial(3, 4); // RX, TX

uint8_t last_open_close_state = HIGH;
uint8_t open_close_state      = HIGH;
uint8_t last_volume_state     = HIGH;
uint8_t volume_state          = HIGH;
uint8_t volume                = VOLUME_3;

void setup() {

    mySerial.begin(9600);
    mp3_set_serial(mySerial);
    mp3_set_volume(volume);

    pinMode(OPEN_CLOSE_PIN, INPUT_PULLUP);
    pinMode(VOLUME_PIN, INPUT_PULLUP);
    pinMode(LED_PIN, OUTPUT);

    digitalWrite(LED_PIN, LOW);
}

void loop() {

    // ---------- OPEN / CLOSE ----------
    open_close_state = digitalRead(OPEN_CLOSE_PIN);

    if (last_open_close_state == LOW && open_close_state == HIGH) {
        mp3_play(OUT_SOUND);
    }
    else if (last_open_close_state == HIGH && open_close_state == LOW) {
        mp3_play(IN_SOUND);
    }

    last_open_close_state = open_close_state;

    // ---------- VOLUME ----------
    volume_state = digitalRead(VOLUME_PIN);

    if (last_volume_state == HIGH && volume_state == LOW) {

        digitalWrite(LED_PIN, HIGH);

        switch (volume) {

            case VOLUME_1:
                volume = VOLUME_2;
                break;

            case VOLUME_2:
                volume = VOLUME_3;
                break;

            case VOLUME_3:
                volume = VOLUME_4;
                break;

            case VOLUME_4:
                volume = VOLUME_5;
                break;

            case VOLUME_5:
                volume = VOLUME_1;
                break;

            default:
                volume = VOLUME_3;
                break;
        }

        mp3_set_volume(volume);
        delay(100);
        digitalWrite(LED_PIN, LOW);
    }

    last_volume_state = volume_state;

    delay(20);
}

ではでは、Switchのドックに埋め込んでみます。

リードスイッチはまだつけていない状態です。うん、まあ、ドックにブレッドボード貼り付けておくよりはマシじゃないでしょうか。USBケーブルが外から中に入っていくのが何だかイマイチな感じですが、まあしょうがない。。。

と、思っていましたら。

ドックの中にもUSBポートがありました。 作った後に気がついてしまいました。。。

ドックの中のUSBポートを使うとこうなります。

。。。うん。まあ、収まってはいる。。。のですが。。。

何かこう、初めから中のUSBポートを使うことを想定して作っていたら、また違った形になっていた気がしてならないのです。

なんだかとてもモヤモヤしてしまったので、もう一度作り直すことにします。やっぱり自分が納得できるところまでは仕上げたいので。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

コメントする

目次