Jag försökte använda SoftwareSerial-biblioteket för MIDI (med 47 effekter), men det verkar som om jag får regelbundet skadade / oväntade meddelanden.
Kretsen jag använder fungerar perfekt när jag ansluter den till HardwareSerial-lösning (så problemet måste ligga i programvara).
Vad jag ser är:
- När jag trycker på anteckningar och släpper anteckningar tänds och släcks LED 13 korrekt.
- När jag använder Serial.print för felsökning får jag korrekta meddelanden. I exemplet nedan tog jag dock bort utskriftsuttalanden för att ha ett minimalt exempel).
- När jag använder SoftwareSerial tänds och släcks LED 13 för varje anteckning korrekt. Men när jag skickar många meddelanden (till exempel genom aftertouch / pitch bend som skickar många meddelanden på kort tid) märkte jag att Obs På / Av-kommandon med "slumpmässiga" värden skickas.
Vissa källor säger att SoftwareSerial borde fungera för MIDI, men hittills är det långt ifrån perfekt. Gör jag något misstag?
(btw, MIDIs baudrate är 31.250 bps, när jag använder pitchband skickas flera hundra byte per sekund, så långt inom MIDI-specifikationen).
Skissen jag använder är:
#include <MIDI.h> // Add Midi Library # include <SoftwareSerial.h>SoftwareSerial swSerial (2, 11); // RX, TXMIDI_CREATE_INSTANCE (SoftwareSerial, swSerial, midiSw1); # define LED 13 // Arduino Board LED lyser på Pin 13void setup () {pinMode (LED, OUTPUT); // Ställ in Arduino-kortstift 13 för att mata ut midiSw1.begin (MIDI_CHANNEL_OMNI); midiSw1.setHandleNoteOn (MyHandleNoteOn); midiSw1.setHandleNoteOff (MyHandleNoteOff);} void loop () {midiSw1.read ();} void MyHandleNoteOn (byte channel, byte pitch, byte speed) {digitalWrite (LED, HIGH); // Slå på lysdioden} ogiltig MyHandleNoteOff (byte kanal, byte tonhöjd, byte hastighet) {digitalWrite (LED, LOW); // Stäng av lysdioden}