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

th_effectone-2_1

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

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

th_effectone-2_6

th_effectone-2_5

スピーカーは小型なものに変えて、マイコンも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_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_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;
    }
    mp3_set_volume (volume);
    delay(100);
    digitalWrite(LED_PIN, LOW);
  }
  last_volume_state = volume_state;

  delay(20);
}

 

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

 

th_effectone-2_1

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

 

と、思っていましたら。

 

 

th_effectone-2_2

 

 

th_effectone-2_3

 

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

 

th_effectone-2_4

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

 

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

 

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

 

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