
Arduinoでデレステを自動化したかった
自動化が好きなのでデレステを自動化してみることにします。
材料
・タッチリレー(5個):スマホとかの画面タッチを再現してくれる優れもの。本記事のキーデバイス
・Arduino UNO:各家庭に3個ぐらいはある便利なやつ
・USB-MIDIケーブル:その名の通りUSBをMIDIに変換するケーブル
・MIDI→シリアル変換基盤:売ってないので作りました
構成
・PC上でMIDIデータを作成
フリーソフトのDominoを使用
・USB→MIDI→シリアル変換
・Arduinoは受け取ったノーツに対応するGPIOをON
とってもシンプル。
結果
できた。
タッチリレーとMIDIでデレステの自動化を試みる。データを作る手間考えたら普通に手でやった方がよくない?(本末転倒) pic.twitter.com/CeMpX9Cios
— 由井河明良 (@Akira_Yuikawa) May 24, 2020
でもめんどくさい。
・曲ごとにMIDIデータを自分で一からポチポチ作る必要がある。
・MIDIデータの再生開始とノーツが落ちてくるタイミングを目押しで合わせなくてはいけないので地味にシビア。さっき自動って言ったじゃねぇかよ。
・そもそもフリック入力ができない(致命的)
結論
普通にプレイした方が断然早い。
PC上で再生したMIDIをシリアル変換してArduinoでタッチリレーを駆動するシンプルな構成。なるほど完璧な作戦っスねー、曲ごとにMIDIデータが必要な点に目をつぶればよぉ~ pic.twitter.com/E4pnMYynGj
— 由井河明良 (@Akira_Yuikawa) May 24, 2020
楽をしようとして新たな作業を発生させてしまったのが敗因です。(働かないために働くのはエンジニアの本質ですが)
次回、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;
}
}
}
(回路図とかプログラムとかはそのうち)