ソフト(スケッチ色々)

tacomidi(=MIDI-USB変換)のソフトウェアの作り方です。
ArudinoIDEのインストールを終えて、USB-MIDI変換装置をつくった後の手順になります。Arduinoでは「プログラムを書く」を「スケッチを書く」というそうなので、お気楽にどうぞ。

1.スケッチ例で動作確認(環境設定・コンパイル・書き込み)
 

最初にArudino Pro mini の基板上に実装されているLEDを点滅させるスケッチ(=プログラム)を書き込んで、動作確認を行います。

①スケッチ(Blink)の選択

 ArudinoIDEを起動して、ファイル→スケッチ例→01.Basic→Blinkを選びます。

②スケッチ(Blink)が開かれます。

③ボード設定の確認

 ツール→ボード→Arudino AVR Borards→Arudino Pro or Pro mini を選びます

④CPUの電圧・周波数の設定

 ツール→プロセッサ→ATmega328P(3.3V,8MHz)を選びます。
 ※ここが間違っていても、コンパイルや書き込みは成功した様に見えるので要注意!

⑤シリアルポートの設定

 USBシリアルコンバーターを使って、Arudino Pro miniとパソコンを接続します。
USBシリアルコンバーター経由で電源が供給されて、Arudino Pro miniは動作を開始します。
パソコンからは、Arudino Pro mini(USBシリアルコンバーター)は、仮想COMポートに見え、Arudino Pro miniに割り当てられたシリアルポートを選びます。
 何番になるかは環境次第なので適当に順番にやってみればいいですが、経験的には1ではない別番号になる気がします、私の環境では9でした。

⑥コンパイル

 矢印をクリックすることで、コンパイル&書き込みがはじまります。

⑦書き込み完了

「ボードへの書き込みが完了しました。」が表示されたら書き込み完了です。
 Arudino Pro miniの基板上のLEDが1秒一定周期で点滅しはじめたら成功です。

書き込みでエラーになったり、LEDが点滅しない場合は、シリアルコンバーターの接続方法、接触不良のハードウェア要因や、ボードや周波数や電圧、シリアルポート設定といったソフトウェア要因の両面を見直して、再度チャレンジしてみてください。

2.USBホスト基板の動作確認

①ファイル→新規ファイルを選択

②新しいスケッチが開きます。

③テンプレートとして書かれている文はいらないので消す
 

 マウスで選択して、「DEL」キーで消える。

③以下をコピペで上のウィンドウに貼りつける

//ZOOM USB TEST
#include<Usb.h>
#include <usbh_midi.h>

//#include <MIDI.h>
//#include <SoftwareSerial.h>
//int rxPin = 2;
//int txPin = 3;
//SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
//MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, MIDI)

USB Usb;
USBH_MIDI Midi(&Usb);

void SendMIDI(int number)
{
Usb.Task();
byte Message[2];
Message[0]=0xC0;
Message[1]=number;
Midi.SendData(Message);
Serial.print("Send:"); Serial.println(number);
}
void setup(){
Serial.begin(115200);
Serial.println("Setup Start");
//MIDI.begin();
if ( Usb.Init()== -1 ) Serial.println("USB ERROR");
}
void loop(){
Usb.Task();
uint8_t data1,data2;
if ( Usb.getUsbTaskState() == USB_STATE_RUNNING )
{
delay(1000);
SendMIDI(0);
delay(1000);
SendMIDI(9);
}

③適当な名前で保存する
 

適当に保存。思い浮かばない人は、ZOOM_USB_TESTにしましょう。

④ZOOMのマルチを接続する

 バッチ番号1番と10番のバッチが1秒毎に切り替わればOK。

 a,上手く行かない場合は、ツール→シリアルモニタを開いてみる。

b.こんなのが開き、Arudino Pro midiが再起動します。
 一番下のボーレートが115200bpsになってない場合は設定してください。
  Serial.print(),Serial.println()文で指定されている内容が表示されるはずです。

  ・SetupStart:が出ない・・・正しくプログラムが書かれてない?
  ・USB ERRORになる・・・USBホスト基板の半田付けが失敗してないか?
  ・Send:0は出るのに切り替わらない、USB端子の差し込みが甘い?

  などなどと色々楽しんでみてください。

3.MIDIスイッチとの接続テスト

上の2と同じ手順で新規ファイルを開いて、以下をコピペします。
MIDI信号は2番ピンから入ってくる想定になってます。

//MIDI ProgramChange Converter

#include <Usb.h>
#include <usbh_midi.h>
#include <MIDI.h>
#include <SoftwareSerial.h>

int rxPin = 2;
int txPin = 3;
SoftwareSerial softSerial(rxPin, txPin);
MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, MIDI);

USB Usb;
USBH_MIDI Midi(&Usb);

void SendMIDI(int number)
{
Usb.Task();
byte Message[2];
Message[0]=0xC0;
Message[1]=number;
//Midi.SendData(Message);
  Serial.print("Send:"); Serial.println(number);
//delay(10);
}

void setup(){
  Serial.begin(115200); 
  Serial.println("Setup Start");
 
  MIDI.begin();

//if ( Usb.Init()== -1 ) Serial.println("USB ERROR");

Serial.println("Setup End ");
}

void loop(){
uint8_t data1,data2;

//	Usb.Task();

//if ( Usb.getUsbTaskState() == USB_STATE_RUNNING )
//{

 if (MIDI.read()) //MIDI受信
 {
  Serial.print("MIDI READ");
	switch(MIDI.getType())
	{
		case midi::ProgramChange:
			data1 = MIDI.getData1(); //プログラムチェンジナンバー取得
  			Serial.println(data1);
	SendMIDI(data1); //MIDI送信
	}
 }
// }else { }
}

4.MIDIスイッチとの接続例

 MIDIスイッチとの接続してテストします。正しくはMIDI入力回路を作成する必要があるのですが、MIDIスイッチと直接接続する作戦で例を示します。

①KORGのFC-6の場合は以下の感じ
 白:GND、茶色:+5V、緑:信号

作り方(KORG FC6改造) – ZOOMのマルチををなぶる (taco386.com) 詳細はこちら

②YAMAHAのMFC05の場合は以下の感じ
 黒:GND、赤:+5V、黄:信号

詳細はこちら
作り方(YAMAHA MFC05 改造) – ZOOMのマルチををなぶる (taco386.com) 

③USB-MIDI変換基板の以下の位置にあわせて接続します。

5.完成形のスケッチ書き込み

 USB基板とMIDIスイッチの確認がとれたので、最終形のプログラムを書きこみます。
MIDIスイッチから入ったプログラムチェンジ信号をUSBに接続されたMIDI機器(ZOOM)に送るという内容になっています。

//MIDI ProgramChange Converter

#include <Usb.h>
#include <usbh_midi.h>
#include <MIDI.h>
#include <SoftwareSerial.h>

int rxPin = 2;
int txPin = 3;
SoftwareSerial softSerial(rxPin, txPin);
MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, MIDI);

USB Usb;
USBH_MIDI Midi(&Usb);

void SendMIDI(int number)
{
Usb.Task();
byte Message[2];
Message[0]=0xC0;
Message[1]=number;
 Midi.SendData(Message);
  Serial.print("Send:"); Serial.println(number);
 delay(10);
}

void setup(){
  Serial.begin(115200); 
  Serial.println("Setup Start");
 
  MIDI.begin();

if ( Usb.Init()== -1 ) Serial.println("USB ERROR");

Serial.println("Setup End ");
}

void loop(){
uint8_t data1,data2;

	Usb.Task();

if ( Usb.getUsbTaskState() == USB_STATE_RUNNING )
{

 if (MIDI.read()) //MIDI受信
 {
  Serial.print("MIDI READ");
	switch(MIDI.getType())
	{
		case midi::ProgramChange:
			data1 = MIDI.getData1(); //プログラムチェンジナンバー取得
  			Serial.println(data1);
	SendMIDI(data1); //MIDI送信
	}
 }
 }else { }
}

おわり