Okokok... I am such an idiot. The problem was not the code. The problem was in front of the screen.
In my main code I just forgot to initialise the MIDI interfaces and in my example code I made a mistake while initialising the array for the MIDIs.
This works (on a Mega!):
#include <MIDI.h>
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, midiA);
MIDI_CREATE_INSTANCE(HardwareSerial, Serial2, midiB);
MIDI_CREATE_INSTANCE(HardwareSerial, Serial3, midiC);
midi::MidiInterface<HardwareSerial> m[]={midiA,midiB,midiC};
void setup()
{
byte i;
Serial.begin(115200);
Serial.println("Start");
// dont't forget to initialize!!!
for(i=0;i<3;i++)
m[i].begin(MIDI_CHANNEL_OMNI);
}
void loop()
{
byte in_port;
for(in_port=0;in_port<3;in_port++)
{
if(m[in_port].read())
{
Serial.print("incoming port: ");
Serial.print(in_port,DEC);
Serial.print(" channel: ");
Serial.print(m[in_port].getChannel());
Serial.print(" data1: ");
Serial.print(m[in_port].getData1());
Serial.print(" data2: ");
Serial.println(m[in_port].getData2());
}
}
}