MIDI Verstäker Steuerung

Hallo zusammen
Ich bin ziehmlich neu in der Arduino Welt und habe folgendes Projekt:
Über einen MIDI-Foodcontroller einen Gitarrenverstärker steuern. Der Foodcontroller verschickt Programchange und Controllchange Befehle, die ich mit dem Arduino lesen und entsprechend Relais schalten möchte.
Dazu nutze ich die MIDI Library von FortySevenEffects.
Mein erstes Problem, das ich habe ist das Empfangen der MIDI Nachricht. Es kommen zwar Nachrichten rein werden aber nicht von der Library verstanden.
Deswegen habe ich mir gedacht, dass ich erstmal etwas einfacher anfange um in die Thematik reinzukommen.
Ich will erstmal einen Programchange Befehl vom Arduino zu einem anderen Endgerät schicken. Aber auch hier habe ich das Problem, dass der Befehl nicht erkannt wird.
Der Aufbau der Schaltung ist wie in dem MIDI Tutorial beschrieben.

Mein einfacher Code:

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

void setup()
{
  MIDI.begin(MIDI_CHANNEL_OMNI);
}

void loop()
{
  MIDI.read();
  MIDI.sendProgramChange(5,1);
  delay(1000);
}

Also irgendwas mache ich genrell Falsch nur was?

Mach doch erst mal einen Test zu Fuss, ob die Verbindung funktioniert. Dazu das kleine Beispiel mit den Midinoten laden und ab zum Klangerzeuger damit. Wenn das geht schaun wir weiter.

Das ist ja das Problem ich habe keinen Klangerzeuger. Ich will ja auch nur Presets schalten. Getestet habe ich den MIDI-in mit dem Hairless Programm. Es kommt ein Signal rein, wird aber nicht von der Library erkannt. Wegen den unterschiedlichen Baudraten von MIDI und Hairless sind die Befehle die Hairless ausspuckt nicht verwendbar.

Das ist kein Problem, dann schickst Du halt Progchanges raus - aber halt selbstgebaut statt mit der Lib, dann wissen wir ob was passiert. Wie eine Midi Message auszusehen hat weisst Du hoffentlich?

OK Ich hatte die letzten Tage wenig Zeit und konnte das jetzt erst testen. Preset senden funktioniert jetzt manuell und mit der vorgefertigten MIDI Lib.

Den Fehler den ich hatte kann ich jetzt nicht mehr rausfinden können. Ich hatte zu der Zeit noch das ganze Beadboard voll mit Schaltung, die ich jetzt wieder abgebaut habe vieleicht war da irgendwas. Am Wochenende teste ich das mit dem Empfangen von Presets und Controll Nachrichten.

Besten Dank erstmal.

Jo, oft ist der Fehler im fliegenden Aufbau zu finden. Ich halte es übrigens für eine gute Idee, LEDs in den Signalweg einzubauen, dann siehst Du gleich ob gesendet/empfangen wird. Für den Prototypstatus in jedem Fall empfehlenswert und kostet so gut wie nix.

So leider bin ich jetzt bei meinem ursprünglichen Problem nicht weiter gekommen. Konnte es aber nun weiter eingrenzen.
Ich nutzte das FX1 von Axess Elektronics. Das habe ich über den Arduino an einen Serial Monitor angeschlossen, da ich immer noch keine Reaktion auf Befehle erhalten habe. Der Serial Monitor spuckt mir immer nur FF also 255 statt zB. C3 05 aus.
Erste Überlegung kaputt?
Nein das FX1 funkioniert mit anderen MIDI Geräten einwandfrei.

Kapier ich nicht - erst schreibst Du es geht, jetzt nicht. Bin verwirrt :astonished:

Zeig mal Sketch, ich probier das dann mit meinem Equipment mal aus.

Also das Send von MIDI an einen Effektgerät geht.
Das Empfangen von MIDI vom Seriell Moritor geht.
Das Empfangen von MIDI vom Footcontroller FX1 geht nicht, wie oben beschrieben. Geht auch nicht wenn ich die Abfrage manuell also ohne die Lib. mache. Da er nur FF empfängt obwohl es was anderes sein sollte zB. C7 12.

Hier der Sketch den ich zum Testen benutze:

#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() 
{
  //Serial.begin(32150);
  MIDI.begin(MIDI_CHANNEL_OMNI);
  pinMode(13, OUTPUT);
  
  MIDI.setHandleProgramChange(program);

}

void loop() 
{
  MIDI.read();
  //MIDI.sendProgramChange(1,1);
  //Serial.write(192);
  //Serial.write(1);
  //delay(1000);

}

void program(byte channel, byte val)
{
  if(channel == 1 && val == 5){
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);}
}

Ich nochmal - krieg's leider zeitlich gerade schlecht hin mit testen, habe mir aber mal die Midi-Beispiele aus der 1.0.5 angeschaut. Eine Midi-Lib bringt diese ja direkt mit, und das Beispiel MIDI_Input.ino geht doch in Deine Richtung.

Probier's mal aus!

Ja moin Ich hab mittlerweile auch das Empfangen vom Footcontroler hin bekommen nur leider nicht nach MIDI Spezifikation über einen Optokoppler. Ich versuche das noch mal mit einem anderen Koppler, wenn der angekommen ist, vieleicht gehts dann.

Ja das Beispiel Input.ino ist genau das was ich machen will im Groben zumindest. Aller dings ist das Beispiel der alte Weg wie man das programieren kann. Die Lib. bringt mittlerweile nette Vereinfachungen mit.

Super, es gibt Fortschritte!

Welchen Optokoppler verwendest Du, wie ist der verschaltet?