Einfacher Code für Arduino um MIDI-MMC-Befehle senden zu können

Aktuell versuche ich, einen Fußschalter für die Akai MPC zu bauen.
Die neue Akai MPC One+ hat keine Anschlüsse für Fußschalter, daher bleibt nur DIY.

Hier der Code für MIDI-MMC-Play:

#include

// Erstelle eine Instanz der MIDI Library
// In diesem Beispiel wird der Hardware-Serielle Port (Serial1 für Arduino Mega,
// oder Serial für andere Arduinos, wenn kein USB-MIDI verwendet wird) genutzt.
// Für Arduinos mit nur einem Serial-Port (z.B. Uno, Nano), ist Serial der Standard.
// Wenn du einen Hardware-Seriellen Port verwenden willst, der von USB getrennt ist (empfohlen für MIDI DIN):
// Für Arduino Mega: MIDI_CREATE_DEFAULT_INSTANCE(); (nutzt Serial1)
// Für Arduino Uno/Nano mit SoftwareSerial oder einem MIDI-Interface:
// MIDI_CREATE_INSTANCE(HardwareSerial, Serial, MIDI); // Für Uno/Nano und Serial Port, der oft auch für USB-Kommunikation genutzt wird.
// Besser wäre eine SoftwareSerial-Verbindung auf Uno/Nano für MIDI DIN:
// SoftwareSerial midiSerial(2, 3); // RX auf Pin 2, TX auf Pin 3
// MIDI_CREATE_INSTANCE(SoftwareSerial, midiSerial, MIDI);

// Für die meisten Arduinos und eine dedizierte MIDI-DIN-Verbindung mit SoftwareSerial:
#include
SoftwareSerial midiPort(2, 3); // RX Pin 2, TX Pin 3. Du benötigst dann noch eine MIDI OUT Schaltung (Optokoppler etc.)
// Pin 3 geht über den MIDI OUT Schaltkreis zum MIDI IN des Empfängergeräts.
MIDI_CREATE_INSTANCE(SoftwareSerial, midiPort, MIDI);

// Wenn du einen Arduino mit mehreren Hardware-Seriellen Ports hast (z.B. Mega)
// und Serial1 für MIDI DIN verwenden möchtest, kannst du auch das nutzen:
// MIDI_CREATE_DEFAULT_INSTANCE(); // Nutzt Serial1 auf einem Mega.

// Oder wenn du ein USB-MIDI-Interface (z.B. Teensy, oder ein Arduino mit MIDI over USB) verwendest,
// kann die Library direkt mit USB-MIDI umgehen. Das ist hardware-spezifisch.
// Für einfache Tests und wenn du ein MIDI-Interface hast, das Serial in MIDI umwandelt, ist SoftwareSerial oder HardwareSerial ok.


void setup() {
Serial.begin(115200); // Für Debugging über den seriellen Monitor

MIDI.begin(MIDI_CHANNEL_OMNI); // Initialisiert die MIDI Library, OMNI bedeutet alle Kanäle
// Für SysEx-Nachrichten ist der Kanal oft irrelevant, aber es muss initialisiert werden.
Serial.println(„Arduino MIDI Sender gestartet.“);
}

void loop() {
// Sende den MMC „PLAY“-Befehl, wenn ein Knopf gedrückt wird,
// oder einfach alle paar Sekunden für den Test.
// In diesem Beispiel senden wir ihn alle 5 Sekunden.

static unsigned long lastSendTime = 0;
const unsigned long sendInterval = 5000; // Alle 5 Sekunden

if (millis() – lastSendTime >= sendInterval) {
sendMmcPlay();
lastSendTime = millis();
}

// Hier könntest du auch einen Button abfragen:
// if (digitalRead(buttonPin) == LOW) { // Annahme: Button ist an buttonPin und LOW, wenn gedrückt
// sendMmcPlay();
// delay(200); // Debounce
// }
}

void sendMmcPlay() {
byte sysExMessage[] = {
0xF0, // Start of System Exclusive
0x7F, // Universal Non-Realtime SysEx ID
0x7F, // Device ID (7F for All Call)
0x06, // MMC Command Group ID
0x01, // MMC Command: PLAY
0xF7 // End of System Exclusive
};

// Sende die SysEx-Nachricht
// Die MIDI Library hat eine Methode dafür:
MIDI.sendSysEx(sizeof(sysExMessage), sysExMessage, false); // „false“ bedeutet, dass F0 und F7 nicht
// erneut hinzugefügt werden (sie sind schon im Array).

Serial.println(„MMC PLAY Befehl gesendet: F0 7F 7F 06 01 F7“);
}