実現したいこと
Arduino Leonardo を使って,電子ピアノの各々の鍵盤と,PC のキーボードの各々のキーを紐づけて,ある鍵盤が押されたらそれに対応したPC キーボードのキーが押された時のような振る舞いをさせたいです(「真ん中のドを押したら,パソコンでは a がタイピングされている」みたいな状態を実現したいです).
回路図を以下に示します.
発生している問題
Hairless MIDI を使って電子ピアノと Arduino Leonardo を仮想 MIDI ケーブルでつないでいるのですが,鍵盤を押してもプログラム通りの動きをしてくれません.
if(MIDI.read()) で鍵盤が押されたかどうかを見ているのですが,この部分が機能していないみたいです.
該当のソースコード
Arduino
1#include <Mouse.h> 2#include <Keyboard.h> 3#include <MIDI.h> 4 5MIDI_CREATE_DEFAULT_INSTANCE(); 6int a; 7void setup() 8{ 9 // put your setup code here, to run once: 10 MIDI.begin(); 11 Serial.begin(115200); 12 Keyboard.begin(); 13} 14 15void loop() 16{ 17 // put your main code here, to run repeatedly: 18 if (MIDI.read()) 19 { 20 Keyboard.press(0x61); 21 delay(1000); 22 Keyboard.release(0x61); 23 } 24 /* 25 else 26 { 27 a=1; 28 Serial.print(a); 29 a=0; 30 delay(1000); 31 } 32 */ 33}
試したこと
- ソースコードではコメントとされていますが,else で b をタイピングする処理を入れたところ,永遠に b がタイピングされましたので,keyboard ライブラリのメソッドが機能していないというわけではないようです.
- プログラムを書き込む際,Hairless MIDI の「Serial <-> MIDI Bridge On」のチェックボックスにチェックは入れてません.
- Hairless MIDI のボードレートと Arduino IDE で設定しているボードレートも 115200 で揃えています.
- 電子ピアノの鍵盤を押したとき,Hairless MIDI では信号が受信されたときに光るランプが MIDI In でも Serial port でも光っていたので,MIDI 信号の送受信はされていると思います...
- MIDI が送信されるチャンネルが違うのかと思い,MIDI.begin(MIDI_CHANNEL_OMNI) としてみましたが,動いてくれませんでした.
補足情報
- Arduino IDE のバージョン : 1.8.13
- MIDI Library のバージョン : 5.0.2
- 電子ピアノ : Roland FP-10
足りていない情報等ございましたらどんどん言って下さい!!