MIDI用のSoftwareSerialライブラリを(47エフェクトで)使用しようとしましたが、定期的に破損した/予期しないメッセージが表示されるようです。
使用している回路は、に接続すると完全に機能します。 HardwareSerialソリューション(したがって、問題はソフトウェアにある必要があります)。
表示される内容:
- ノートを押してリリースノートを押すと、LED13が正しくオン/オフになります。
- デバッグにSerial.printを使用すると、正しいメッセージが表示されます。ただし、以下の例では、最小限の例を示すためにprintステートメントを削除しました。
- SoftwareSerialを使用すると、すべてのノートでLED13が正しくオン/オフになります。ただし、多くのメッセージを送信すると(たとえば、短時間で多くのメッセージを送信するアフタータッチ/ピッチベンドなど)、「ランダム」値の注オン/オフコマンドが送信されることに気付きました。
一部の情報筋によると、SoftwareSerialはMIDIで機能するはずですが、これまでのところ完璧にはほど遠いです。間違いはありますか?
(ところで、MIDIのボーレートは31.250 bpsです。ピッチバンドを使用すると、これまでのところMIDI仕様の範囲内で、毎秒数百バイトが送信されます)。
使用するスケッチは次のとおりです。
#include <MIDI.h> // Midiライブラリを追加します#include<SoftwareSerial.h>SoftwareSerial swSerial(2、11); // RX、TXMIDI_CREATE_INSTANCE(SoftwareSerial、swSerial、midiSw1); #define LED 13 // ArduinoボードのLEDはピン13にありますvoidsetup(){pinMode(LED、OUTPUT); // Arduinoボードのピン13を出力midiSw1.begin(MIDI_CHANNEL_OMNI);に設定します。 midiSw1.setHandleNoteOn(MyHandleNoteOn); midiSw1.setHandleNoteOff(MyHandleNoteOff);} void loop(){midiSw1.read();} void MyHandleNoteOn(バイトチャネル、バイトピッチ、バイト速度){digitalWrite(LED、HIGH); // LEDをオンにします} void MyHandleNoteOff(バイトチャネル、バイトピッチ、バイト速度){digitalWrite(LED、LOW); // LEDをオフにします}