MIDI senden: GO hängt sich auf

  • techlit

    Nutzt du vier einzelne Sevsegs oder eines mit vier 7-Segment-Ziffern?

    Habe jetzt etwas herumprobiert, jedoch noch mit keinem positiven Ergebnis. So langsam vermute ich auch, ob ggf. mein MIDI-USB-Kabel nicht ganz in Ordnung ist. Immerhin kommen völlig unterschiedliche Sachen an, je nachdem ob ich an MIDI-Kabel oder LoopMidi sende. Ich glaube ich probiere es mal mit einem Kabel eine Stufe qualitativer...

  • Nutzt du vier einzelne Sevsegs oder eines mit vier 7-Segment-Ziffern?

    Habe jetzt etwas herumprobiert, jedoch noch mit keinem positiven Ergebnis. So langsam vermute ich auch, ob ggf. mein MIDI-USB-Kabel nicht ganz in Ordnung ist. Immerhin kommen völlig unterschiedliche Sachen an, je nachdem ob ich an MIDI-Kabel oder LoopMidi sende. Ich glaube ich probiere es mal mit einem Kabel eine Stufe qualitativer...

    Ich nutze kein fertiges Modul, sondern einzelne 7-Segmente, die über einen MAX7219-Treiber angesteuert werden. Der MAX7219 kann insgesamt 64 Leds schalten, das reicht sowohl für die 7-Segmente als auch für alle anderen Leds an meinem Spieltisch. Für den Treiber gibt es auch eine passende Arduino Library.

    Die Lösung mit LoopMidi + HairlessMidi ist meines Erachtens recht robust. Ich hatte jedenfalls bislang keine Probleme mit fehlenden oder fehlerhaften Nachrichten. Mit MIDI-Kabeln habe ich noch keine Erfahrung gemacht.

  • So langsam vermute ich auch, ob ggf. mein MIDI-USB-Kabel nicht ganz in Ordnung ist.

    Wie hast du deinen Arduino angeschlossen an das GO System? Eigentlich wäre die beste Möglichkeit per USB Kabel. Mit MIDIUSB ist das dann einfach ein Midigerät. Wenn bei USB Daten ankommen, dann hat alles geklappt. Bei einem analogen Midi wäre ich schon vorsichtig.

    Zum umwandeln kannst du char nehmen:

    Melodeum.de - Wissenswertes zu Harmonium

  • Ursprünglich alles direkt per nativem USB Anschluss. Die Eingabe der Note-Befehle erfolgt auch die ganze Zeit über nativen USB. Aber bzgl. Empfangen über nativ USB hat sich GO beim Senden an den Arduino ja immer aufgehangen, Ursache für dieses Thema hier. Ich habe also angefangen herumzuprobieren. Mit einer DIN-Buchse, die an einen RX-Pin angeschlossen ist und der normalen MIDI-Library funktioniert das Senden von Note und ControlChange Befehlen an den Arduino hervorragend. Nur Sysex noch nicht.

    Habe heute einiges getestet von euren Vorschlägen, aber hat bis jetzt keinen Erfolg gebracht. Möglicherweise liegt es auch am Due und ich sollte es mal mit einem Uno oder Mega probieren.

    Einer anderen Sache bin ich momentan noch auf der Spur, nämlich diesem Link hier. Demnach verträgt die USBMIDI Library nur 4 Bytes bei Sysex, d.h. man muss eingehende Nachrichten aufsplitten und nachher wieder zusammenbauen. Damit muss ich mich heute Abend mal beschäftigen.

    Folgende Stellschrauben sehe ich noch:

    1. Anderes USB-MIDI-Kabel für altmodischen Empfang via DIN-Buchse. Meines hat, wie ich erst nachher gesehen habe, durchwachsene Bewertungen. Teilweise heißt es, dass Nachrichten verstümmelt ankommen, wegen fehlerhafter Hardware in dem Teil. Es kommen ja auch nicht alle 16 oder 32 Bytes an, immer nur ein Teil. Vielleicht also die Ursache.
    2. Anderen Arduino. Der Due ist ggf. der falsche für diesen Anwendungsfall.
    3. Anderer Code, z.B. den aus dem Link oben.

    Mit den Codes von techlit bin ich noch am Probieren, doch ggf. würde auch hier Punkt 1 und/oder 2 von meiner Liste quer schießen.

  • Anderen Arduino. Der Due ist ggf. der falsche für diesen Anwendungsfall.

    Ich weiß nicht wie deine Python Fähigkeiten sind, aber wenn du dir das vorstellen kannst, dann bestell dir doch mal einen Pi Pico für 5 Euro mir https://www.berrybase.de/raspberry-pi-p…ler-board?c=298 das ist auch zum ausprobieren viel besser weil du nicht ständig compilieren musst und der Code aus dem Speicher ausgeführt werden kann und ein Debuggen sehr einfach ist. Wenn es sein muss läuft darauf auch das Arduino C und die IDE, USBMIDI geht damit jedoch nicht in dieser Form, da müsstest du auf TinyMIDI umsteigen.

    USBMIDI ist ohnehin Murks. Ja ich nutze es selbst, weil es sehr simpel ist. Aber es ist nur ein Wrapper und wird schon lange nicht mehr gepflegt. Bei dem DUE kommt noch hinzu, dass es dort überhaupt nicht getestet ist. Es funktioniert zwar, die Entwickler haben damit aber niemals etwas getestet oder dafür entwickelt. Ich erinnere da auf z.B das Flush() Problem auf dem DUE.

    Allgemein könntest du noch andere Bibliotheken testen wie das besagte TinyMIDI. Es ist zwar am Anfang anstrengend, aber du hast mehr Kontrolle.

    BTW Sysyex:

    Schau dir mal dieses Repo an, da gibt es einige gute Beispiele wie es empfangen wird. Vielleicht bringt dich das auch ein Stück weiter https://github.com/lathoub/Arduin…ysExReceive.ino und dazu die Übersicht https://github.com/lathoub/Arduino-USBMIDI

    Melodeum.de - Wissenswertes zu Harmonium

  • Neues USB-MIDI-Kabel ist angekommen, und gleich getestet. Und es funktioniert!!! Und zwar mit meinem ursprünglichen Code. Der Fehler war nie der Code, nur das Kabel. 3€ mehr ausgegeben und es klappt. Setzernummer wird einwandfrei als Sysex 16 Byte String übertragen und im LCD Display korrekt "aufgelöst", d.h. als dreistellige Ziffernfolge.

    Vielen Dank an alle, die hier mitgedacht und Code geschrieben haben! Wie ich die Lösung dann umsetze schildere ich in meinem Midifizierungsbericht.

  • Naja GO ist nicht über dem fehlerhaften MIDI Kabel abgestürzt. Es hat ja die richtigen Informationen gesendet, wie man z.B. mit loopMIDI herausfinden konnte. Dass im Serial Monitor bzw. auf der LCD Display nur Grütze ankam, lag an dem USB-MIDI-Kabel, das die Informationen offenbar irgendwie zerhackt hat.

    GO hat sich festgefahren, als MIDI Befehle an den Arduino Due geschickt werden sollten. Doch das kann auch mit der MIDIUSB Library zusammenhängen, denn mit der MIDI Library und einer DIN-Buchse geht es anstandslos.