Ik heb geprobeerd de SoftwareSerial-bibliotheek voor MIDI te gebruiken (met 47 effecten), maar het lijkt erop dat ik regelmatig corrupte / onverwachte berichten krijg.
Het circuit dat ik gebruik, werkt perfect wanneer ik het aansluit op de HardwareSeriële oplossing (dus het probleem moet in de software liggen).
Wat ik zie is:
- Als ik op notities en release-opmerkingen druk, gaat LED 13 correct aan en uit.
- Als ik Serial.print gebruik voor foutopsporing, krijg ik correcte berichten. In het onderstaande voorbeeld heb ik echter de printopdrachten verwijderd om een minimaal voorbeeld te hebben.)
- Als ik SoftwareSerial gebruik, gaat LED 13 voor elke notitie correct aan en uit. Toen ik echter veel berichten verstuur (bijvoorbeeld door aftertouch / pitch bend die veel berichten in korte tijd verzendt), merkte ik dat Note On / Off-commando's met 'willekeurige' waarden worden verzonden.
Sommige bronnen zeggen dat SoftwareSerial voor MIDI zou moeten werken, maar tot nu toe is het verre van perfect. Maak ik een fout?
(trouwens, de baudrate van MIDI is 31.250 bps, als ik pitchband gebruik, worden er honderden bytes per seconde verzonden, tot dusver binnen de MIDI-specificatie).
De sketch die ik gebruik is:
#include <MIDI.h> // Add Midi Library # include <SoftwareSerial.h>SoftwareSerial swSerial (2, 11); // RX, TXMIDI_CREATE_INSTANCE (SoftwareSerial, swSerial, midiSw1); # definieer LED 13 // Arduino Board LED staat op Pin 13 void setup () {pinMode (LED, OUTPUT); // Stel Arduino-kaartpen 13 in om midiSw1.begin (MIDI_CHANNEL_OMNI) uit te voeren; midiSw1.setHandleNoteOn (MyHandleNoteOn); midiSw1.setHandleNoteOff (MyHandleNoteOff);} void loop () {midiSw1.read ();} void MyHandleNoteOn (bytekanaal, bytepitch, bytesnelheid) {digitalWrite (LED, HIGH); // Zet LED aan} void MyHandleNoteOff (bytekanaal, bytepitch, bytesnelheid) {digitalWrite (LED, LOW); // Zet LED uit}