DIY MIDI Footcontroller mit Arduino

Midi Yoke simuliert virtuelle MIDI Ports für Windows.
Midi Ox greift auf diese Ports zu, um mit der Aussenwelt zu kommunizieren. Es ist eine schöne Midi Werkbank mit der man so ziemlich alles in Midi senden kann, was man möchte und hat den "totalen" Überblick über das, was reinkommt, sehr umfangreich.
Die Verbindung zwischen Breadboard und PC erfolgt über den FDTI Chip (google ft232rl ftdi usb adapter).

Also Breadboard -> FTDI Adapter -> SpikenzieLabs Serial Midi Converter -> Midi Yoke -> Midi Ox

Wenn das mit der Baudrate des FTDI Treibers heute wieder nicht klappt kaufe ich mir einen fertigen Midi zu USB Adapter...


EDIT: nicht geschafft...
Midi Interface gekauft und gelernt, dass ich anstatt gestern und vorgestern STUNDEN meines Lebens zu vergeuden, für 17€ ziemlich viel andere Dinge hätte machen können...
Ok, es ist schön, festzustellen, dass man den eigentlichen Fehler gefunden hat aber es nervt mörderisch.
Midi Out: Check
Midi In: Check
Das Chaos auf dem Brettle wächst... :D
 
Zuletzt bearbeitet:
Hi,

Gibt es denn Fortschritte? Ich würde mich dem Aufbau eines Arduino basierten Foot Controllers anschließen wollen.
Bei mir sollen es ausschließlich 5 Taster zum senden von PC befehlen, 2 für Bank up/down sowie zwei frei belegbare cc- Taster werden.

Display wäre auch ganz nett...
Wie handhabt ihr das mit den Befehlen für Bank up, nach Betätigung 5 Stellen aufaddieren?

Viele Grüße,
Matze
 
Theoretisch ein globaler Preset Counter oder ähnliches. Den dann beim Tritt um 5 erhöhen.

Also ein:
Serial.Write(192 + channel);
192 ist in dem Fall 0xC0 für Program Change.
Danach ein:
Serial.Write(preset_counter);

Ich gehe davon aus, dass jede Betätigung der UP/Down-Schalter sofort das Preset ändert.
eleganter wäre eine Lösung die erst nach dem Betätigen eines der "restlichen" Schalter, die für CC oder Lieblingspresets zuständig sind, das zuletzt über UP/Down gewählte Preset aktivieren.
 
Zuletzt bearbeitet:
Ich habe ja keine Bänke einprogrammiert. Naja bzw. 2 wenn man die Looper Funktionen als eine Bank sehen will.
Ich würde aber auch einen Counter einbauen und dann einfach bei jedem Program Change den Counter*5 dazu addieren.

Falls es was hilft hier auch noch mal mein Layout und der fertige Code.
 

Anhänge

  • Arduino Footcontroller.zip
    108 KB · Aufrufe: 310
  • Gefällt mir
Reaktionen: 1 Benutzer
Hi Tuckster,

genau so sehe ich das auch. Wenn ich von Bank 1, Preset 1 zu Bank 2, Preset 3 wechseln möchte, würde es ohne "Bestätigung" gar nicht funktionietren.
Ich glaube, mit dem zu erstellenden Code habe ich mir ganz schon was aufgehalst... :)
Man findet auch durchaus verschiedene Herangehensweisen der Midiprogrammierung im Arduino. Das deutschsprachige Tutorial von Götz Müller Derholt lässt eine existierende Midi- Libary (Github) komplett außer acht und Infos zur Programmierung von Tastern gibt es auch nicht so tiefgehend.

Habt ihr noch Vorlagen an denen ihr euch orientiert?

Danke und viele Grüße
Matze

Theoretisch ein globaler Preset Counter oder ähnliches. Den dann beim Tritt um 5 erhöhen.

Also ein:
Serial.Write(192 + channel);
192 ist in dem Fall 0xC0 für Program Change.
Danach ein:
Serial.Write(preset_counter);

Ich gehe davon aus, dass jede Betätigung der UP/Down-Schalter sofort das Preset ändert.
eleganter wäre eine Lösung die erst nach dem Betätigen eines der "restlichen" Schalter, die für CC oder Lieblingspresets zuständig sind, das zuletzt über UP/Down gewählte Preset aktivieren.
 
Habt ihr noch Vorlagen an denen ihr euch orientiert?

Ich hatte mir die Midi Library mal angeschaut, aber irgendwas hat dort nicht geklappt. Aber da ich auch nur senden wollte und die restlichen Funktionen nicht brauche habe ichs dann gelassen.
Sonst habe ich mich nur an dem zeug von Götz orientiert + vorherige Programmiererfahrung.

Infos zur Programmierung von Tastern gibt es auch nicht so tiefgehend.

Aber für das was wir damit machen reichen die Grundlagen, die er vermittelt finde ich.
 
Habt ihr noch Vorlagen an denen ihr euch orientiert?
https://github.com/eepp/avr-midi-footswitch
Das habe ich stark umgebastelt und erweitert, ist jedoch standard C, kein Arduionisch :D

Das mit den Tastern ist eigentlich nicht so schwer. Lies die beiden UP/Down-Taster, und setze eine Variable, die z.B. preset_changed heisst (oder program_changed).
Wenn die anderen Taster betätigt werden, prüfe zuerst, ob preset_changed zuvor gesetzt wurde oder nicht. Wenn ja, sende erst den Program Change und setze preset_changed wieder auf 0.
Ist preset_changed schon auf 0, wenn du die "anderen" Taster bedienst, kann man gleich deren Befehl absetzen.

Ich weiß nicht ob es was bringt, evtl wird es aber hierdurch ein bisl klar. Nicht irritieren lassen, get_key_short ist eine Funktion um die Taster abzufragen und läuft in einer Schleife (nicht zu sehen).
Der Schleifenzähler ist im Prinzip der Index des gerade gedrückten Tasters.
Code:
if( get_key_short( switches[foo].mask )){                                      // no invert because mask "contains" all keys as active high
    if(foo == 0){                                                                 // program up switch
        preset_changed = true;
        cur_preset = numUp(cur_preset);
        showDigits(dec2dig(cur_preset));
    }else if (foo == 1){                                                          // program down switch
        preset_changed = true;
        cur_preset = numDown(cur_preset);
        showDigits(dec2dig(cur_preset));
    }else if (foo > 1){                                                          // any programmable switch
        if(preset_changed){                                                     // if up/down was pressed before a programmable switch was pressed set the selected preset first instead of executing the action of the programmable switch
            sendMsg(foo, pc_status, cur_preset, switches[foo].last);              // send cur_preset which contains the previous selected preset
            preset_changed = false;
        }else if(switches[foo].status == pc_status){
            showDigits(dec2dig(switches[foo].data1));
            sendMsg(foo, pc_status, switches[foo].data1, switches[foo].last);     // if programmable switch is pc then send message immediately
        }else if(switches[foo].status == cc_status){
            switches[foo].last ^= switches[foo].mask;                           // remember switch toggled
            sendMsg(foo, switches[foo].status, switches[foo].data1, switches[foo].last);
        }
    }
}

Edit: ok hier noch ein Nachtrag:

Up: ist immer ein PC-Taster
Down: ist immer ein PC-Taster
Programmable Switch: kann PC- und CC-Taster sein, daher gibt es die Unterscheidung zwischen pc_status und cc_status, wenn man einen der Taster mit foo>1 drückt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: 1 Benutzer
Vielen Dank euch beiden!

Ich hoffe morgen kommt der Arduino an, dann werde ich erstmal etwas herumspielen um ein Gefühl dafür zu bekommen. Dann wird es ernst aber sicher eine Weile dauern... :)
@tuckster: In deinem Code ist ein LCD oder andere Anzeige aufgeführt? Du hast up/ down Taster und mind. einen weiteren Taster für PC´s, oder?
Könntest du mir bitte mal deine Anschlussbelegung nennen, dann kann ich das besser nachvollziehen.

Danke!
Matze
 
Das mit dem LCD dürfte aber für den Anfang auch eine Herausforderung sein denke ich.
Ich hatte auch mit dem Gedanken gespielt, aber dann wieder verworfen, weils nicht gescheit in mein Gehäuse gepasst hätte.
 
Na handwerklich bekomme ich das gut hin ;-)
Ich mache mir mehr wegen der Programmierung sorgen...

Das mit dem LCD dürfte aber für den Anfang auch eine Herausforderung sein denke ich.
Ich hatte auch mit dem Gedanken gespielt, aber dann wieder verworfen, weils nicht gescheit in mein Gehäuse gepasst hätte.
 
Ich verwende an einem Aufbau als Display zwei 7-Segmentanzeigen die ich über jeweils ein 74hc595 Shift Register ansteuere. Beim anderen Aufbau, der mir aktuell als Midi-Monitor dient nutze ich ein LCD.
Die Anschlussbelegung wird nicht viel nutzen, da die Bezeichnungen beim Arduino anders lauten, also zumindest beim Programmieren. Das hört sich jetzt erstmal blöd an und hilft dir nicht weiter...
Erst kleine Probleme anfangen und verstehen und dann immer weiter. Aktuell sieht mein Nest so aus, habe auch schon wieder zurückgebaut, da z.B. für die Funktionstests an sich weniger Schalter ausreichen:
avr.jpg


Fang langsam an, grundlegende Dinge wie ein einziger Schalter und dann immer weiter. Gerade für den Arduino gibts haufenweise Hilfe im Netz.
Interessant finde ich z.B. den Kollegen hier: https://yannguillermou.wordpress.com/category/diy-arduino-midi-controller/
 
So werde ich es auch machen! Beeilen muss ich mich nicht, es gibt ein funktionierendes Setup. Dies würde ich nur gerne weiter optimieren.
Das kennen wir ja alle... :)

Viele Grüße
Matze

 
OK, dann häng ich mich hier mal mit dran, hatte schon vor einiger den Plan mal ein Arduino-based Footcontroller für meinen Tubemeister zu basteln. Cool dass ihr auch dran arbeitet ;-)
 
Moin.
Ich wollte jetzt keinen neuen Thread eröffnen und da sich hier ja doch ein paar Experten mit ähnlichen Projekten tummeln, frag ich hier mal.

Mein derzeitiges Luxusproblem: ich hab einen (DIY) Arduino Nano Midi Controller mit 2 Tastern, welche die Presets am Nova System rauf und runter schalten. Also von Preset 0 auf 1 ...89 auf 0 und Rückwärts usw. Funktioniert wunderbar.
Leider kann der Controller aber nicht wissen, welches Program aktiviert ist, wenn ich zwischendurch direkt am Nova über Bank up/down + 1,2,3 einen anderen Preset aktiviere. Der Controller macht dann da weiter, wo er zuvor aufgehört hat. Ist auch vom Programm her richtig, aber könnte schöner sein. Nur wie?

1. Frage: Würde eine Kommunikation über Midi Out vom Nova auf Midi-In am Arduino funktionieren ?

Das würde bedeuten ich hätte 2 Midikabel am Controller. Nicht schön, aber selten.

2.Frage: Oder gibt es evtl. Befehle für Preset +/- ?
Also quasi "egal welches Preset jetzt ist - geh einfach einen weiter oder zurück" .

Auch wenn es schon ein wenig länger ruhig ist hier, hoffe ich auf Ideen, Ansätze ...
 
Hi,

ja es gibt Befehle für Preset +/-. Allerdings sind die je nach Gerät unterschiedlich bzw. auch mal gar nicht vorhanden. TC ist MIDI mäßig recht gut aufgestellt, sodass du Glück haben könntest. Schau mal
in der Anleitung vom Nova nach der Liste/ Tabelle der MIDI- Befehle. Sind meist ControlChange Befehle...

viel Erfolg!

PS: Ich baue auch gerade an einem speicherbaren MIDI-Looper und einem zusätzlichem Controller für CC´s an meinem Midiboard, alles via Arduino... :)
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Moin.
Hatte mich schon damit abgefunden und wie gesagt funktioniert ja auch ...., aber ...
Hab jetzt einen neuen Controller gebaut. Dieser hat Midi In und Midi Out mit 4 Tastern für Favoriten-Presets.
Da der Controller jetzt weiß welcher Preset vor dem jeweiligen Favoriten aktiv war, bewirkt ein weiterer Tritt des Fav-Tasters eine Rückkehr zum alten Preset.
Damit lässt es sich viel nützlicher einsetzen, als nur Presets rauf und runter zu schalten.
Allen DIYern weiterhin viel Erfolg bei Euren Projekten ;)
Edit: das wichtigste hab ich glatt vergessen...
Vielen Dank an @Direwolf !!!
Ohne deinen Code würd ich noch Presets vor und zurück skippen.:hail:
 
Zuletzt bearbeitet:
Hallo,
Wenn du Probleme beim kompilieren hast, ist das Problem nicht beim anschließen der Peripherie, sondern eher bei deinem Programmcode zu suchen.
Dafür müsstet du aber auch deinen scetch Posten.
Andreas
 
Moin...das ist richtig.
Wer hat denn Probleme beim kompilieren ?
 
Hallo,
ich bin z.Zt. auch daran eine für mich funktionales Arduino MIDI Floorboard zu bauen,
da mich bei den zu kaufenden keines so richtig überzeugt hat.
ich habe im Moment noch alles Provisorisch auf Lochraster und Breadboard aufgebaut, damit sich die
ganze Geschichte etwas bessert testen lässt.
Das Problem beim Programmieren war leider, das wenn man länger daran sitzt, immer mehr tolle Ideen
in den Sinn kommen, die "unbedingt" benötigt werden...
Ursprünglich hatte ich nur 12 Programmtaster geplant (sind hier erst 8), bei denen ich beim ersten
betätigen (LED leuchtet grün) einen Program change und beim zweiten betätigen (LED leuchtet blau)
einen anderen Program change sende, und auf einen Taster immer zwei verschiedene Sounds oder einen
sound mit z.b. mehr Gain anwählen kann.
Als nächstes sind noch vier Schaltausgänge für Amp, u.s.w. hinzugekommen und vier Relais für
einen Effektloop.
...Dann ist mir noch die Idee gekommen für jeden Programm change vier Exp. Pedaleingänge (sind im Moment
noch durch die vier Potis realisiert) frei auf jeden beliebigen Control Kanal zu routen, oder zu deaktivieren
wenn diese nicht benötigt werden.
Zur Zeit bin ich dabei noch 6 Effekttaster hinzuzuprogrammieren, wobei ich mir noch nicht im klaren bin, ob ich diese
einmal im Kanal festlegen werde, oder je nach angewähltem Programm unterschiedliche Funktionen zuweisen soll.
deshalb auch die änderbare "Beschriftung" mit 6 kleinen LCD Displays.
Das Programm kann auch 4 verschiedene MIDI Geräte auf verschiedenen Kanälen verarbeiten.

Einziger Wermutstropfen ist bei der Sache, das ich es noch nicht geschafft habe das alles per Menü zu verändern,
da die Erstellung eines Menüs zum einen richtig Tricky ist und ich mich noch nicht
wirklich mit der ProgMem Geschichte beim Arduino auskenne um die Werte dauerhaft im Controller zu speichern.
Aber da bin ich auch noch dran...
Zur Zeit gebe ich halt alles über die IDE des Arduino ein. Ist bei Veränderungen ziemlich umständlich, allerdings
programmiere ich meinen jetzigen Footcontroller auch seltens um.

DSC02789.JPG

DSC02786.JPG

DSC02787.JPG
 
  • Gefällt mir
Reaktionen: 4 Benutzer

Ähnliche Themen


Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben