So,
weiter geht's. Solange wir noch auf die Boards warten, hier schon mal ein kleines 4 Taster Projekt.
Ich möchte mit 4 Tastern jeweils eine belibiege Sequenz an Midibefehlen schicken.
Hardware technisch sehe das so aus. Wobei den rechten Teil macht später das Midishield.
Links sind 4 Lechtdioden für die Rückmeldung und 4 Taster. Die sollen die späteren Fußtaster darstellen.
Programm hängt mit dran.
Ich hab den Quellcode in 2 Dateien aufgeteilt.
Einmal das Steuerprogramm: Switch_Program_Change.ino und den Teil, der unsere Midi Implementierung aufnimmt midi.h.
Und da ich ein fauler Sack bin, verwende ich für die Auswertelogik für die Taster eine externe Bibliothek.
Die gibbet im Arduino Library Manager und heisst Switch von Albert van Dalen. Die wertet die SChalter vernünftig aus, weil Schalter und Taster können prellen. Kann man selber machen, muss man aber nicht. Wenn ihr die Lib nach nicht habt, müßt ihr die ersteinmal installieren. Das geht über den Library Manager sehr gut.
Das Programm ist einfach straigt forward geschrieben.
Im setup initialisiere ich zunächst die LEDs und die Midi Schnittstelle. Die Schalter werden über die Konstrukte
Switch switch_1 = Switch(SWITCH_1); schon richtig initialisiert.
Dann sende ich direkt die für den Switch 1 vorgesehenen Midisequenz und schalte die entsprechende LED ein.
In der loop verarbeite ich zunächst evtl. Tasstendrücke und dann, je nachdem welcher Taster gedrückt wurde, sende ich dessen Midi Sequenz und schalte die LED ein.
Zur Midisequenz:
Jeder Taster hat ein zugehöriges Array mit den Midi Befehlen.
Für Taster 1 z.B.
const byte SEND_1[] = {0xC1, 0x01};
0xC1 bedeutet: Sende auf Kanal 1 einen Programchange
0X01bedeutet: zu Programm 1. Will man das erweitern, schreib man einfach die nächsten Befehle als weitere Werte kommasepariert dahinter. z.B. ein weiteren Programchange auf Kanal 2 mit Program 16.
const byte SEND_1[] = {0xC1, 0x01, 0xC2, 0x10};
So und nun viel Spass damit.
Kommen wir nun zum Thema: Speichern und Programmieren der zu sendenden Befehle.
Hier hab ich ja schon Variante 1 gezeigt. Für den Selbstprogrammierer ist das die einfachste Lösung. Einfach die Sendebefehle mit in den Quelltext packen, neu kompilieren und hochladen. Fertig.
Auf der Bühne natürlich nicht so einfach machbar. Und wenn man alles in ein Gehäuse gebaut hat, wäre das auch nciht so prikelnd.
Also wie bekomme ich die Daten in den Switch ohne USB Anschluss. Naja, wir haben im Arduino auch noch ein sog. EEPROM, das ist ein nicht flüchtiger Speicher (Im gegensatz zum RAM) den man vom Programm aus überschreiben kann. Das bleibt auch nach dem Ausschalten erhalten. Also könnte man dort die Midi Sequenzen speichern. Zum Ändern müßte man dann irgendwie dem Controller die neuen Daten schicken. Im Midi Umfeld gibt es da schon was, das nennt sich SysEx. Damit kann man belibige Daten an einen Midicontroller schicken. Der Controller selber entscheidet dann, ob er damit was anfangen kann. Die Struktur ist bis auf einen Header frei wählbar. So könnten wir unsere Befehlsfolgen einfach per SysEx an den Midi In schicken und müßten im Programm n ur auf diesen DAtenstrom entsprechend reagieren und die Daten im EEPROM ablegen.
Wie das geht, zeige ich das nächste Mal.