In SerialLesen() wird dein commandByte zwei mal überschrieben...
Warum tust du das?
Ganz offensichtlich brauchst du einen Kommando Parser.
Weiterhin fehlen Einrückungen/Struktur.
Es ist dadurch sehr unangenehm zu lesen.
Weiterhin die sinnfreie Endlosschleife: while (Serial2.available() ==1);
Oder hat sie einen Sinn?
(und ich sehe ihn nur nicht)
Auch dein checkMIDI() Gedöns kannst du sicherlich optimieren.