{"id":441,"date":"2025-10-29T23:16:20","date_gmt":"2025-10-29T22:16:20","guid":{"rendered":"https:\/\/www.hman-projects.de\/?p=441"},"modified":"2025-10-29T23:16:20","modified_gmt":"2025-10-29T22:16:20","slug":"einfacher-code-fuer-arduino-um-midi-mmc-befehle-senden-zu-koennen","status":"publish","type":"post","link":"http:\/\/www.hman-projects.de\/?p=441","title":{"rendered":"Einfacher Code f\u00fcr Arduino um MIDI-MMC-Befehle senden zu k\u00f6nnen"},"content":{"rendered":"Aktuell versuche ich, einen Fu\u00dfschalter f\u00fcr die Akai MPC zu bauen.<br \/>Die neue Akai MPC One+ hat keine Anschl\u00fcsse f\u00fcr Fu\u00dfschalter, daher bleibt nur DIY.<br \/><br \/>Hier der Code f\u00fcr MIDI-MMC-Play:<br \/><br \/>#include <MIDI.h><br \/><br \/>\/\/ Erstelle eine Instanz der MIDI Library<br \/>\/\/ In diesem Beispiel wird der Hardware-Serielle Port (Serial1 f\u00fcr Arduino Mega,<br \/>\/\/ oder Serial f\u00fcr andere Arduinos, wenn kein USB-MIDI verwendet wird) genutzt.<br \/>\/\/ F\u00fcr Arduinos mit nur einem Serial-Port (z.B. Uno, Nano), ist Serial der Standard.<br \/>\/\/ Wenn du einen Hardware-Seriellen Port verwenden willst, der von USB getrennt ist (empfohlen f\u00fcr MIDI DIN):<br \/>\/\/ F\u00fcr Arduino Mega: MIDI_CREATE_DEFAULT_INSTANCE(); (nutzt Serial1)<br \/>\/\/ F\u00fcr Arduino Uno\/Nano mit SoftwareSerial oder einem MIDI-Interface:<br \/>\/\/ MIDI_CREATE_INSTANCE(HardwareSerial, Serial, MIDI); \/\/ F\u00fcr Uno\/Nano und Serial Port, der oft auch f\u00fcr USB-Kommunikation genutzt wird.<br \/>\/\/ Besser w\u00e4re eine SoftwareSerial-Verbindung auf Uno\/Nano f\u00fcr MIDI DIN:<br \/>\/\/ SoftwareSerial midiSerial(2, 3); \/\/ RX auf Pin 2, TX auf Pin 3<br \/>\/\/ MIDI_CREATE_INSTANCE(SoftwareSerial, midiSerial, MIDI);<br \/><br \/>\/\/ F\u00fcr die meisten Arduinos und eine dedizierte MIDI-DIN-Verbindung mit SoftwareSerial:<br \/>#include <SoftwareSerial.h><br \/>SoftwareSerial midiPort(2, 3); \/\/ RX Pin 2, TX Pin 3. Du ben\u00f6tigst dann noch eine MIDI OUT Schaltung (Optokoppler etc.)<br \/>                               \/\/ Pin 3 geht \u00fcber den MIDI OUT Schaltkreis zum MIDI IN des Empf\u00e4ngerger\u00e4ts.<br \/>MIDI_CREATE_INSTANCE(SoftwareSerial, midiPort, MIDI);<br \/><br \/>\/\/ Wenn du einen Arduino mit mehreren Hardware-Seriellen Ports hast (z.B. Mega)<br \/>\/\/ und Serial1 f\u00fcr MIDI DIN verwenden m\u00f6chtest, kannst du auch das nutzen:<br \/>\/\/ MIDI_CREATE_DEFAULT_INSTANCE(); \/\/ Nutzt Serial1 auf einem Mega.<br \/><br \/>\/\/ Oder wenn du ein USB-MIDI-Interface (z.B. Teensy, oder ein Arduino mit MIDI over USB) verwendest,<br \/>\/\/ kann die Library direkt mit USB-MIDI umgehen. Das ist hardware-spezifisch.<br \/>\/\/ F\u00fcr einfache Tests und wenn du ein MIDI-Interface hast, das Serial in MIDI umwandelt, ist SoftwareSerial oder HardwareSerial ok.<br \/><br \/><br \/>void setup() {<br \/>  Serial.begin(115200); \/\/ F\u00fcr Debugging \u00fcber den seriellen Monitor<br \/>  <br \/>  MIDI.begin(MIDI_CHANNEL_OMNI); \/\/ Initialisiert die MIDI Library, OMNI bedeutet alle Kan\u00e4le<br \/>                                \/\/ F\u00fcr SysEx-Nachrichten ist der Kanal oft irrelevant, aber es muss initialisiert werden.<br \/>  Serial.println(&#8222;Arduino MIDI Sender gestartet.&#8220;);<br \/>}<br \/><br \/>void loop() {<br \/>  \/\/ Sende den MMC &#8222;PLAY&#8220;-Befehl, wenn ein Knopf gedr\u00fcckt wird,<br \/>  \/\/ oder einfach alle paar Sekunden f\u00fcr den Test.<br \/>  \/\/ In diesem Beispiel senden wir ihn alle 5 Sekunden.<br \/><br \/>  static unsigned long lastSendTime = 0;<br \/>  const unsigned long sendInterval = 5000; \/\/ Alle 5 Sekunden<br \/><br \/>  if (millis() &#8211; lastSendTime >= sendInterval) {<br \/>    sendMmcPlay();<br \/>    lastSendTime = millis();<br \/>  }<br \/><br \/>  \/\/ Hier k\u00f6nntest du auch einen Button abfragen:<br \/>  \/\/ if (digitalRead(buttonPin) == LOW) { \/\/ Annahme: Button ist an buttonPin und LOW, wenn gedr\u00fcckt<br \/>  \/\/   sendMmcPlay();<br \/>  \/\/   delay(200); \/\/ Debounce<br \/>  \/\/ }<br \/>}<br \/><br \/>void sendMmcPlay() {<br \/>  byte sysExMessage[] = {<br \/>    0xF0, \/\/ Start of System Exclusive<br \/>    0x7F, \/\/ Universal Non-Realtime SysEx ID<br \/>    0x7F, \/\/ Device ID (7F for All Call)<br \/>    0x06, \/\/ MMC Command Group ID<br \/>    0x01, \/\/ MMC Command: PLAY<br \/>    0xF7  \/\/ End of System Exclusive<br \/>  };<br \/><br \/>  \/\/ Sende die SysEx-Nachricht<br \/>  \/\/ Die MIDI Library hat eine Methode daf\u00fcr:<br \/>  MIDI.sendSysEx(sizeof(sysExMessage), sysExMessage, false); \/\/ &#8222;false&#8220; bedeutet, dass F0 und F7 nicht<br \/>                                                              \/\/ erneut hinzugef\u00fcgt werden (sie sind schon im Array).<br \/><br \/>  Serial.println(&#8222;MMC PLAY Befehl gesendet: F0 7F 7F 06 01 F7&#8220;);<br \/>}","protected":false},"excerpt":{"rendered":"<p>Aktuell versuche ich, einen Fu\u00dfschalter f\u00fcr die Akai MPC zu bauen.Die neue Akai MPC One+ hat keine Anschl\u00fcsse f\u00fcr Fu\u00dfschalter, daher bleibt nur DIY. Hier der Code f\u00fcr MIDI-MMC-Play: #include \/\/ Erstelle eine Instanz der MIDI Library\/\/ In diesem Beispiel wird der Hardware-Serielle Port (Serial1 f\u00fcr Arduino Mega,\/\/ oder Serial f\u00fcr andere Arduinos, wenn kein [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-441","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=\/wp\/v2\/posts\/441"}],"collection":[{"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=441"}],"version-history":[{"count":1,"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=\/wp\/v2\/posts\/441\/revisions"}],"predecessor-version":[{"id":442,"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=\/wp\/v2\/posts\/441\/revisions\/442"}],"wp:attachment":[{"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=441"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.hman-projects.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}