Hallo amelie,
das sieht alles sehr seltsam aus.
Zunächst mal setzt du die Geschwindigkeit der seriellen Schnittstelle auf 9600 Bps. Midi wird üblicherweise mit 31250 Bps betrieben (siehe
hier).
Dann verwendest du innerhalb von loop() die Funktion "Serial.print(val);", um deine Werte zu übertragen. Bei diesem Aufruf wird die Zahl (val) zunächst in einen String umgewandelt. Aus der Zahl 64 wird so z.B. der String "64", also eine Folge von zwei Zeichen (Bytes). Dieser String wird dann über die Serielle übertragen.
In deiner TxMidi3-Routine verwendest du allerdings "Serial.println(val, BYTE);". Hierbei wird (val) nicht in einen String umgewandelt, sondern als ASCII-Wert (zwischen 0 und 255) betrachtet und übertragen. Aus der Zahl 64 wird so das Zeichen "@". Die verschiedenen Funktionen von Serial.println() findest du
hier, die ASCII-Zeichentabelle
hier.
Da bei MIDI normalerweise Geräte angesteuert werden ist die normale Datenübermittlung nicht im Klartext (also mit Serial.print(val); ), sondern mit einem Binärformat (Serial.print(val, BYTE); ) zu machen. Sowas ist dann aber nicht mehr für Menschen lesbar.
Gruß
pi