見出し画像

Arduinoでデレステを自動化したかった

自動化が好きなのでデレステを自動化してみることにします。

材料

タッチリレー(5個):スマホとかの画面タッチを再現してくれる優れもの。本記事のキーデバイス

画像1

Arduino UNO:各家庭に3個ぐらいはある便利なやつ

画像3

USB-MIDIケーブル:その名の通りUSBをMIDIに変換するケーブル

MIDI→シリアル変換基盤:売ってないので作りました

画像2

構成

・PC上でMIDIデータを作成

画像4

フリーソフトのDominoを使用

・USB→MIDI→シリアル変換

・Arduinoは受け取ったノーツに対応するGPIOをON

とってもシンプル。

結果

できた。

でもめんどくさい。

・曲ごとにMIDIデータを自分で一からポチポチ作る必要がある。

・MIDIデータの再生開始とノーツが落ちてくるタイミングを目押しで合わせなくてはいけないので地味にシビア。さっき自動って言ったじゃねぇかよ。

・そもそもフリック入力ができない(致命的)

結論

普通にプレイした方が断然早い。


楽をしようとして新たな作業を発生させてしまったのが敗因です。(働かないために働くのはエンジニアの本質ですが)


次回、M5StickV編にきっと続く

以上


おまけ

//MIDI設定
 #include  <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
int vol = 0;
int Channel;

//出力ピン設定とか
const int LED = 13;
const int IAs3 = 12; //左端から1
const int IG3 = 11;
const int IE3 = 10; //中央
const int ICs3 = 9;
const int IAs2 = 8; //右端を5

void setup() {
MIDI.begin(); //MIDIライブラリを使う
pinMode(LED,OUTPUT); // 13
pinMode(IAs3,OUTPUT); // 12
pinMode(IG3,OUTPUT); // 11
pinMode(IE3,OUTPUT); // 10
pinMode(ICs3,OUTPUT); // 9
pinMode(IAs2,OUTPUT); // 8
}
void loop(){
 uint8_t code;
 uint8_t ch,data1,data2,Channel;
 MIDI.setInputChannel(1);
   if (MIDI.read()) //MIDIメッセージを受信したら
     {
       digitalWrite(LED,HIGH); //MIDI信号を受信したらLEDが光る
       switch(MIDI.getType()) {
           case midi::NoteOn: 
           data1 = MIDI.getData1(); //Note NO.
           data2 = MIDI.getData2(); //Velocity
           if(data2 == 0){
           }
           else{
             switch(data1){ //Note No.に対応したデジタルピンをHIGH
               case 58:digitalWrite(IAs3,HIGH); //12
               break;
               case 55:digitalWrite(IG3,HIGH); //11
               break;
               case 52:digitalWrite(IE3,HIGH); //10
               break;
               case 49:digitalWrite(ICs3,HIGH); //9
               break;
               case 46:digitalWrite(IAs2,HIGH); //8
               break;
               default:break;
             }
           }
           break;
           
           case midi::NoteOff:
           data1 = MIDI.getData1();
           switch(data1){ //Note No.に対応したデジタルピンをLOW
             case 58:digitalWrite(IAs3,LOW); //12
             break;
             case 55:digitalWrite(IG3,LOW); //11
             break;
             case 52:digitalWrite(IE3,LOW); //10
             break;
             case 49:digitalWrite(ICs3,LOW); //9
             break;
             case 46:digitalWrite(IAs2,LOW); //8
             break;
             default:break;
           }
           break;
           default:
           break;
           }
        }
}

(回路図とかプログラムとかはそのうち)


この記事が参加している募集

つくってみた

この記事が気に入ったらサポートをしてみませんか?