Midi System Exclusive Daten von Synth empfangen und vergleichen

Hallo zusammen,

möchte gerne mit der Midi Library System Exclusive Daten (SysEx) vom Synthesizer empfangen und mit einer bestehenden SysEx vergleichen.

Ich weis nicht wie ich das anstellen soll, könnt ihr mir da helfen?

#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();

                      //F0  43  10  4C 04 00  0C  40  F7  
byte SysexArray1[9] = {240, 67, 16, 76, 4, 0, 12, 64, 247}; //SysEx in DEC


void handleSysex(void(*fptr)(byte *array, byte size) ){

    if (SysexArray1 == /*Eingehende SysExDaten vom Synthesizer*/){         //Vergleichen von SysexArray1 und dem eingehenden SysEx Data Byte

      mach irgentwas;
    }

  
}

void setup()
{
  
    MIDI.setHandleSystemExclusive(handleSysex);  
 
  
    MIDI.begin(MIDI_CHANNEL_OMNI);  
}
void loop()
{
    MIDI.read();
}

Danke für die Hilfe!
Gruß Andy

Ich hab das so gemacht (Achtung, Auszug aus Code, meiner hat auch nix mit Midi zu tun)

  if (Serial.available() == numberofBytes){    //bei mir ist's eine feste Anzahl von Bytes die ich lese, daher warte ich bis die Anzahl im Puffer ist
    for (int i = 0; i <= numberofBytes; i++)
    {
      serialBuffer[i] = Serial.read();    //hier lese ich die empfangenen Bytes in ein Array
   }

   if(strcmp(serialBuffer,requestID)==0)  //und hier erfolgt der Vergleich der empfangenen Bytes mit dem vorher definierten Inhalt des Arrays "requestID"
{
//tuwas
  }
  else if (strcmp(serialBuffer,requestValues)==0)  //und hier erfolgt der Vergleich der empfangenen Bytes mit dem vorher definierten Inhalt des Arrays "requestValues"
  {
//tuwas anderes
  }

Hallo Klaus,

vielen Dank für Deine Antwort.

Leider bin ich mit der Antwort überfordert, da ich blutiger Anfänger bin.

Ich habe schon das Problem, wie ich aus dieser Funktion;

void setHandleSystemExclusive (void(*fptr)(byte *array, byte size))

(die ich aus der Midi Library entnommen hab)

die eintreffenden SysEx in ein Byte Array speichern kann.

Lg Andy

arduinoknight:
...
Leider bin ich mit der Antwort überfordert, da ich blutiger Anfänger bin.
...

Dein Sketch ist schön kurz gehalten. Ich werde mal einen genaueren Blick darauf werfen, allerdings wird wohl mindestens eine meiner Schlafphasen vergehen, bis das passiert.

Gruß

Gregor

Klaus_ww:
Ich hab das so gemacht ...

Da es sich wohl nicht um Zeichen handelt, würde ich strcmp durch memcmp() ersetzen.

Hallo zusammen,

leider steh ich voll auf dem Schlauch.
Trotz den Tipps von euch komme ich nicht weiter.

Ich möchte gerne mit der Midi Library zb. diese (SysEx: 240, 67, 16, 76, 4, 0, 12, 64, 247 )

byte SysexArray1[9] = {240, 67, 16, 76, 4, 0, 12, 64, 247};

mit den eingehenden SysEx Daten vom Synthesizer vergleichen.
Und wenn diese identisch ist mit der "SysexArray1" Variable, soll der Arduino was tun.

Ich hab also das Problem, dass ich nicht weis, wie ich die eingehenden SysEx Daten in ein Array auslesen bzw. speichern und diese dann vergleichen kann.

Ich kann nämlich mit den Methoden

const byte * getSysExArray() const oder
void setHandleSystemExclusive(void(*fptr)(byte * array, byte size)

die in der MIDI_Class Reference angegeben sind, nicht viel anfangen.

Leider hab ich im Netz nichts gefunden was mir weiter hilft...

Vielen Dank.
Gruß Andy

arduinoknight:
...
Trotz den Tipps von euch komme ich nicht weiter.
...
Ich kann nämlich mit den Methoden

const byte * getSysExArray() const oder
void setHandleSystemExclusive(void(*fptr)(byte * array, byte size)

die in der MIDI_Class Reference angegeben sind, nicht viel anfangen.
...

Ich verstehe nicht, wieso Du überhaupt eine Bibliothek benutzt. MIDI-Daten zu empfangen ist echt simpel: Du musst nur die serielle Schnittstelle passend konfigurieren und eintreffende Daten mit Serial.read() verarbeiten.

Bekommst Du den Empfang von MIDI-Daten ohne Beispielcode hin? Ich habe zwar etwas, bin aber gerade zu faul zum Suchen.

Gruß

Gregor

Du hast die Zeiger SysexArray1 und array, sowie die Feldlänge size. Dann könntest Du sowas probieren:

if (memcmp(SysexArray1, array, size) == 0)

Ohne Gewähr!

Da sich arduinoknight nicht wieder gemeldet hat, hat sich diese Frage wohl erledigt. Ich streiche das also mal von meiner Todo-Liste.

Gruß

Gregor