der komplette Arduino code  
 

Obwohl mir die Lösung von Mathis Rosenhauer sehr gut gefällt, habe ich fast alles neu programmiert. Zum einen weil es mein erstes Arduino-Projekt ist, zum anderen weil es durch die Einbindung des OLEDs, die andere Abschaltung sowie die hardwaremäßige Tasterentprellung keinen Sinn macht vorhandenen Code so stark anpassen zu wollen. Allerdings habe ich den Kern das Programms, nämlich das Senden der Set-Daten übernommen. Wie genau sich der Datensatz aufbaut, der zum THR10 gesendet wird kann man auf WIP.webloc sehen.

Der oben stehende Code benötigt noch einige Librarys die man von https://github.com/arduino/Arduino downloaden kann.
SPI.h
SD.h
Usb.h
usbh_midi.h
SSD1306Ascii.h
SSD1306AsciiAvrI2c.h

Der Aufbau des Programms sieht im Groben so aus:
Nach Setzten des Halteausganges und Initialisierung von USB-Host, Cart-reader und Display läuft das Programm in einem Loop der aus drei Unterprogrammen besteht. Abfrage ob ein Treter gedrückt wurde, den Lauftext ein Stück weiter schieben und kontrollieren, ob eine Zeit der Untätigkeit nicht überschritten wurde.
Wird ein Taster getreten, wird die aktuelle Nummer hoch- oder runter gezählt, das entsprechende Patch von der Karte gelesen und an den Verstärker geschickt.
Der Scrolltext ist der Text, der im Editor für das jeweilige Set gewählt wurde. Dieser ist mit auf der SD-Karte gespeichert. Am unteren Displayrand wird dieser ständig von rechts nach links vorbeigeschoben.
Im 3. Unterprogramm wird überwacht ob eine maximale Zeit fünf Minuten überschritten wird. Dann schaltet sich der Footswitch zum Batteriesparen aus. Das stört nicht beim Spielen. Der Yamaha behält seine letzte Einstellung und beim Neueinschalten wird das letztbenutzte Patch geladen. Dazu wird kurz vor dem Ausschalten, ob wegen Zeitüberschreitung oder Treten beider Fußschalter, die Nummer des letztbenutzten Patches au die SD-Karte geschrieben.