Klavier Beleuchtung mit Arduino Due

Hallo,
ich habe ein Problem mit einem Projekt. Ich möchte mit einem Arduino Due über dem nativen USB Eingang MIDI Daten von meinem E-Piano empfangen und damit einen LED-Streifen (WS2812B) steuern. Im Prinzip genau dieses Produkt. (Link: Piano LED Plus – Piano Led Shop)
Nun zu meinem Problem, ich bekomme einfach keinen Input, egal was ich mache. Ich habe diverse Bibliotheken ausprobiert und keine führte zum Erfolg. Ich mache anscheinend irgendetwas falsch. Mein Setup wäre folgendes. Der Arduiono Due ist über den programming port mit dem PC verbunden, und mein E-Piano (Alesis Recital Pro) ist über den nativen USB port mit dem Arduino verbunden. Zum Testen habe ich diverse “read/input” sketches der Bibliotheken (MIDIUSB, MIDI, MIDI Libary, USBH_MIDI) probiert, nichts funktionierte.
Ich habe mich die letzten Tage sehr damit beschäftigt und gefühlt das ganze Internet durchstöbert, aber ich bekomme es einfach nicht zum laufen.

Das Einlesen des MIDI Inputs über MIDI-OX, falls das E-Piano mit dem PC verbunden ist, funktioniert.

Hier eines der Versuche, das MIDIUSB_read sketch mit einer LED als Kennzeichnung, ob ich Input bekomme oder nicht.

/*
 * MIDIUSB_test.ino
 *
 * Created: 4/6/2015 10:47:08 AM
 * Author: gurbrinder grewal
 * Modified by Arduino LLC (2015)
 */ 

#include "MIDIUSB.h"

#define LED_PIN 22

// First parameter is the event type (0x09 = note on, 0x08 = note off).
// Second parameter is note-on/note-off, combined with the channel.
// Channel can be anything between 0-15. Typically reported to the user as 1-16.
// Third parameter is the note number (48 = middle C).
// Fourth parameter is the velocity (64 = normal, 127 = fastest).

void noteOn(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOn);
}

void noteOff(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOff);
}

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(115200);
}

// First parameter is the event type (0x0B = control change).
// Second parameter is the event type, combined with the channel.
// Third parameter is the control number number (0-119).
// Fourth parameter is the control value (0-127).

void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  MidiUSB.sendMIDI(event);
}

void loop() {
  midiEventPacket_t rx;
  do {
    rx = MidiUSB.read();
    if (rx.header != 0) {
      digitalWrite(LED_PIN, HIGH);
    }
  } while (rx.header != 0);
  digitalWrite(LED_PIN, LOW);
}

Ich hoffe Ihr könnt mir weiterhelfen.

LG Rene

Das ist vermutlich ein Host-Client Problem. Die USB-Schnittstelle ist nicht symmetrisch. Es kann sich immer nur ein 'Client' mit einem 'Host' verbinden. Normalerweise ergibt sich das bereits aus den Steckern am USB-Kabel. Die USB-Schnittstellen am PC sind 'Host' Schnittstellen, dein MIDI-Keyboard hat eine 'Client' Schnittstelle. Deshalb funktioniert das. Ein Arduino hat üblicherweise auch erstmal eine 'Client' Schnittstelle, und deshalb funktioniert die Verbinung Keyboard<->Arduino nicht. Du brauchst einen Arduino mit Host-Schnittstelle. Ob der DUE das 'out of the Box' kann, weis ich allerdings nicht. Die üblichen 'MIDIUSB' Libs verhalten sich als Client am USB.
Wenn dein Keyboard auch eine Standard-MIDI Schnittstelle hat, wäre das auch eine Alternative für die Verbindung zum Arduino. Das ist allerdings mit einem 5V-Arduino etwas einfacher als mit einem DUE, da die Standard-MIDI Schnittstelle von einer 5V-Versorgung ausgeht.

Der Due kann USB HOST.

Ob das mit dem E-Piano funktioniert, kann ich Dir nicht sagen.
Grüße Uwe

Host-Client Problem klingt sehr einleuchtend. Mein e-Piano hat einen USB Typ B Anschluss, und die USBHost libary für den Due (wie von uwefed erwähnt) hab ich auch vergeblich versucht.

Ich habe jetzt einfach ein USB Host shield für meinen UNO bestellt. Werde es damit versuchen.

Aber danke für die Tipps.