Kommen wir zu Part2 (Anschluss/Programmierung der MIDI IN Buchse). Wir brauchen dazu einen Optokoppler (ein Optokoppler 4N35 ist beim Arduino Starter Kit mit dabei). Dieser überträgt die Signale aus dem MIDI System in unser Arduino System. Der Optokoppler lässt dabei die beiden Stromkreise galvanisch voneinander getrennt. Die Signale werden innerhalb des Optokopplers per Licht übertragen. Daher ist bei dem Aufbau der Schaltung darauf zu achten den Optokoppler richtig rum (Der Punkt auf dem Optokoppler gehört nach links unten) auf das Board zu stecken, da die Signale „nur“ in eine Richtung laufen können. Die Diode unterhalb des 220 Ohm Widerstands dient dem Schutz unseres Arduinos. Der in der Skizze grüne Draht gehört an den PIN 4 der MIDI Buchse (mit dem 220 Ohm Widerstand davor), der gelbe Draht an den PIN 5 der Midi Buchse. Der Plan sieht so aus:
Das Ergebnis (Klicken für größer) sollte dann wie folgt aussehen:
Nun können wir bereits das MIDI Out Kabel des MIDI Interfaces (was am Computer angeschlossen ist) in unsere MIDI In Buchse stecken. Viele Spieltische (Orgeln) verwenden ja fast nur MIDI IN des Computers um die Daten vom Spieltisch zu empfangen und an Hauptwerk (HW) oder GrandOrgue (GO) zu senden. Hier sendet HW oder GO etwas an uns (die LCD Informationen), daher sollte eigentlich jeder noch ein MIDI Out an seinem System frei haben.
Kommen wir wieder zur Programmierung. Auch hier könnten wir jetzt wieder alles selber programmieren. Das brauchen wir aber nicht, da es eine schöne MIDI Bibliothek für den Arduino gibt. Diese erledigt für uns (wie bei der LCD Bibliothek) die meisten Aufgaben und wir arbeiten diesmal halt mit einem MIDI Objekt. In dem folgenden Video https://www.youtube.com/watch?v=Twx0kzxXvp4 könnt Ihr sehen, wie die Bibliothek in die Arduino Software eingebunden werden kann. Das Video ist auf englisch, eins auf deutsch (generell) hier: https://www.youtube.com/watch?v=ke-tOzy1Hzo
Nachdem Ihr die MIDI Library in die Arduino IDE eingebunden haben, könnt Ihr euch hier zunächst den fertigen sketch herunterladen: Download Sketch zu Part 2. Nun noch ein paar Erläuterungen zum Programm Code (wenn dazu ein Video gewünscht ist, bitte schreibt es in die Kommentare). Als Erstes fügen wir die MIDI Library zu unserem Programm mit der folgenden Zeile hinzu:
#include <MIDI.h>
int displayNumber = 0;
//Create an instance of the library with default name, serial port and settings MIDI_CREATE_DEFAULT_INSTANCE();
MIDI.begin(MIDI_CHANNEL_OMNI);
In der nächsten Zeile sagen wir der MIDI Library, welche Funktion die MIDI Library ausführen soll, wenn ein Midi SysEx Befehl (welche HW und GO für Ihre LCD benutzen) empfangen wird. Diese Funktion (MyHandleSystemExclusive) ist eine von uns komplett neu hinzugefügte Funktion (neben der SETUP und LOOP Standard Funktion).
MIDI.setHandleSystemExclusive(MyHandleSystemExclusive);
MIDI.read(); // Continuously check if Midi data has been received.
void MyHandleSystemExclusive(byte *data, unsigned int array_size) { if (data[3] != displayNumber) { //Not the selected Display number return; } int column = 0; bool start = false; //Turn Arduino Board LED on - to see on the Arduino, that somthing happens digitalWrite(13,HIGH); lcd.clear(); //clear LCD lcd.setCursor(0, 0); //set Cursor to first row and column for (int i = 0; i < array_size; i++) { //iterate through received Data Array if (data[i] >= 32 && data[i] <= 126 && start) { lcd.write(data[i]); //write Information to LCD column = column + 1; if (column == 16) { lcd.setCursor(0,1); //after 16 Char switch to row 2 } } if (data[i] == 125) //check if LCD starts { start = true; } } digitalWrite(13,LOW); //Turn LED off - we have finnished }