Zum Inhalt springen
Startseite » MIDI Controller für Arme – Teil 1

MIDI Controller für Arme – Teil 1

Union Jack Go to english version

Ich bin stolzer Besitzer eines Headrush Gigboards, ein Amp Modeller und Multieffektgerät mit Touchscreen. Das Ding ist wirklich klasse und eröffnet dem geneigten Gitarristen eine vollkommen neue Effektwelt. Einziges Manko, es gibt kein Computerprogramm um das Gerät zu programmieren. Die Bedienung über das Touchpanel ist zwar wirklich simpel, aber wenn das Gerät auf dem Boden steht ist es für meinen alten Rücken ziemlich mühsam sich zum Touchpanel runter zu bücken.;)

Nun könnte man an das Gigboard einen MIDI Controller anschließen, sodaß man es auf einen Tisch stellen kann um es zu programmieren und man könnte über den MIDI Fußschalter z.B. die Presets durchschalten. Nur, gute MIDI Controller sind teuer und kosten fast dasselbe wie ein Gigboard.:-/ Hinzu kommt, daß diese MIDI Controller vollkommen oversized sind. Für meine Zwecke brauchte ich eigentlich nur die vier Schalter des Gigboard in einem externen Fußschaltergehäuse.

Aber, es gibt ja die Arduinos, da sollte sich doch was basteln lassen und es lässt sich was basteln.:-)

Recherche

Nach ein bißchen Recherche bin ich im bassic.de Forum auf ein Programm für den Arduino gestoßen, mit dem sich MIDI Befehle absetzen lassen. Dort wurde auch eine Schaltung für einen einfachen Midi Controller gepostet. Also habe ich erstmal ein Steckbrett mit einem Arduino nano bestückt und entsprechend vier Taster, LEDs und eine MIDI Buchse aufgestöpselt.

Drahtverhau
Schaltplan

Und der entsprechende Schaltplan dazu.

MIDI Befehle des Gigboards

Die MIDI Fähigkeiten des Headrush Gigboards sind leider nicht besonders gut dokumentiert, es gibt eine Tabelle in der die Control Changes (CC) angegeben sind um bestimmte Aktionen auf dem Gigboard auszulösen.

#CCAktion#CCAktion
50Fußschalter 173Looper stummschalten
51Fußschalter 274Looper umkehren
52Fußschalter 375Block 1 Umschalten Ein/Aus
53Fußschalter 476Block 2 Umschalten Ein/Aus
64Tap-Tempo77Block 3 Umschalten Ein/Aus
65Looper: 1/2 Geschwindigkeit78Block 4 Umschalten Ein/Aus
66Looper: 2X Geschwindigkeit79Block 5 Umschalten Ein/Aus
67Looper: 1/2 Loop80Block 6 Umschalten Ein/Aus
68Looper: 2X Loop81Block 7 Umschalten Ein/Aus
69Looper Start/Stopp82Block 8 Umschalten Ein/Aus
70Looper Aufnahme83Block 9 Umschalten Ein/Aus
71Looper Insert84Block 10 Umschalten Ein/Aus
72Looper Peel85Block 11 Umschalten Ein/Aus
MIDI CC# des Gigboards
Irgendwie funktioniert das aber nicht

Wie man unschwer erkennt sind für die vier Fußschalter die CC# 50-53 zuständig, zum Schalten muss ein Wert von 64-127 übergeben werden, also gab ich das erstmal in den Arduino Sketch ein. Leider funktionierte das nicht so wie erwartet. Die Fußschalter des GB haben eine Doppelfunktion, mit einem einfachen Druck werden die Presets und Stompboxes durchgeschaltet, mit einem längeren Druck verschiedene Funktionen (VIEW, HANDSFREE, LOOPER, TUNER).

Nun war es so, wenn man z.B. einfach einen CC# 50,127 an das GB schickte, daß nicht die Presets oder Stompboxes geschaltet wurden, sondern die VIEW Funktion aufgerufen wurde, also praktisch ein langer Druck auf den Fußschalter 1 simuliert wurde. Das war jetzt nicht das was ich wollte.:-(

Nach einiger Recherche bin ich dann darauf gestoßen, daß man zwei CC# Messages absetzen muss, z.B. erst ein CC# (50,64), dann ein CC# (50,0), leider tat sich dann aber gar nichts, nach ein wenig Grübeln kam ich dann darauf, daß die Befehle vermutlich zu schnell hintereinander kommen und das GB das nicht mitbekommt, also setzte ich eine Pause von 50ms zwischen die beiden Befehle und siehe da, es funktionierte.

Das Konzept

Ich habe mir dann ein Konzept überlegt, wie ich das am besten umsetze, letztendlich habe ich mich für fünf Fußschalter entschieden. Vier Schalter repräsentieren die vier Fußschalter des Gigboards, der fünfte Schalter dient dazu zwischen langem Druck und kurzem Druck umzuschalten, weil es mir nicht gelungen ist herauszubekommen, wie ich das mit dem Arduino umsetze. Vielleicht hat ja der geneigte Leser eine Idee?

Als Grundgerüst habe ich das auf bassic.de von Willie vorgestellte Sketch und die midi.h heruntergeladen und dann entsprechend angepasst. Das Ganze ist recht simpel, ich wollte auch nichts Programmierbares sondern im Prinzip nur eine „Verlängerung“ der Fußschalter auf den Boden.

Funktionsbeschreibung

Versorgt man den Arduino mit Strom werden alle LEDs einmal hin und einmal zurück durchgeschaltet um die Betriebsbereitschaft zu signalisieren. Die einzelnen Schalter funktionieren dann erstmal genauso, wie die Schalter auf dem Gigboard, wenn man einen der vier Schalter betätigt, leuchtet die zugehörige LED kurz auf und der Schaltvorgang wird durchgeführt. Um jetzt einen langen Druck auszuführen, drückt man zuerst den fünften Fußschalter, die LED brennt dann dauerhaft, dann den gewünschten Fußschalter betätigen um die Funktionen VIEW, HANDSFREE, LOOPER oder TUNER aufzurufen. Diese lassen sich dann ebenfalls mit dem Arduino MIDI Controller bedienen. Eine kleine Ausnahme ist der HANDSFREE Modus, der nur mit einem langen Druck auf den vierten Fußschalter beendet werden kann. Um das zu erreichen drückt man wieder den fünften Fußschalter und kann dann mit dem vierten Schalter den HANDSFREE Modus beenden.

Bühnentauglich ist sowas natürlich eher nicht, weil man immer den fünften Schaltern drücken muss um die andern Modi erreichen zu können, aber das war auch gar nicht meine Intention, mir ging es eben hauptsächlich darum, das GB auf dem Schreibtisch stehen haben zu können um es zu programmieren und gleichzeitig die Möglichkeit zu haben per Fußschalter umschalten zu können.

Der Arduino Sketch

Mein angepasster Sketch sieht so aus, das sollte selbsterklärend sein. (Updated 24.02.23 – Nur die erste LED leuchtete)

/*
   Simple program to send program changes over the MIDI protokol, if a switch is pushed.
   For every switch there is a LED to present, that this switch is pressed.
   
   Adapted by grossmaggul to work with Headrush Gigboard v0.1

*/
#include "midi.h"
#include <avdweb_Switch.h>


const byte SWITCH_1 = 2;
const byte LED_1 = 3;
const byte SWITCH_2 = 4;
const byte LED_2 = 5;
const byte SWITCH_3 = 6;
const byte LED_3 = 7;
const byte SWITCH_4 = 8;
const byte LED_4 = 9;
const byte SWITCH_5 = 10;
const byte LED_5 = 11;

bool longpress = false;

Midi midi;
Switch switch_1 = Switch(SWITCH_1);
Switch switch_2 = Switch(SWITCH_2);
Switch switch_3 = Switch(SWITCH_3);
Switch switch_4 = Switch(SWITCH_4);
Switch switch_5 = Switch(SWITCH_5);

void setup() {
  initLEDs();
  midi.initMidi();
  setLEDs(LED_1);
  setLEDs(LED_2);
  setLEDs(LED_3);
  setLEDs(LED_4);
  setLEDs(LED_5);
  setLEDs(LED_4);
  setLEDs(LED_3);
  setLEDs(LED_2);
  setLEDs(LED_1);
 
}


void loop() {
  pollSwitches();
  // sub switches(cc,led)
  // FS 1/VIEW
  if (switch_1.pushed()) {
    switches(50,LED_1);
  }

  // FS 2/HANDSFREE  
  if (switch_2.pushed()) {
    switches(51,LED_2);
  }

  //FS 3/Looper  
  if (switch_3.pushed()) {
    switches(52,LED_3);
  }

  //FS 4/TUNER
  if (switch_4.pushed()) {
    switches(53,LED_4);
  }

  // Longpress toggle
  if (switch_5.pushed()) {
    if(longpress == false )
      {
        longpress = true;
        digitalWrite(LED_5, 1);
      }
      else if(longpress == true )
      {
        longpress = false;
        digitalWrite(LED_5, 0);
      }
  }
}

void switches(int cc, int sw_led) { 
   if (longpress == false)
    {
      midi.changeController(1,cc,64);
      delay(50);
      midi.changeController(1,cc,0);
    }
    else if (longpress == true)
    {
     midi.changeController(1,cc,127);
     longpress = false;
     digitalWrite(LED_5, 0); // Longpress LED switched off
    }
    setLEDs(sw_led);
}

void initLEDs() {
  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  pinMode(LED_3, OUTPUT);
  pinMode(LED_4, OUTPUT);
  pinMode(LED_5, OUTPUT);  
  allLEDsOff();
}

void pollSwitches() {
  switch_1.poll();
  switch_2.poll();
  switch_3.poll();
  switch_4.poll();
  switch_5.poll();
}

void setLEDs(byte led) {
  allLEDsOff();
  digitalWrite(led, 1);
  delay(100);
  digitalWrite(led,0);
}

void allLEDsOff() {
  digitalWrite(LED_1, 0);
  digitalWrite(LED_2, 0);
  digitalWrite(LED_3, 0);
  digitalWrite(LED_4, 0);
}

Das war jetzt erstmal der erste Teil, im zweiten Teil werde ich dann den Aufbau des MIDI Controllers beschreiben, kann aber noch was dauern, da ich jetzt erstmal die Teile besorgen muss.

Stromversorgung

Da der Arduino nano eine USB mini Buchse hat, die auch zur Stromversorgung dient, werde ich versuchen diese mit einem Adapter auf eine USB-B Buchse ins Gehäuse zu bauen. Ich hatte erst überlegt mit einem Spannungswandler eine bei Pedalen übliche Stromversorgungsbuchse einzubauen, aber das hat natürlich den Nachteil, daß man zum Aufspielen des geänderten Sketches immer das Gehäuse öffnen muss, mit einer robusten USB-B Buchse ist das Ganze wesentlich flexibler. Dazu dann mehr im zweiten Teil.

Dann wünsche ich viel Erfolg beim Nachbauen und Testen.


Midi controller for poor – Part One

I’m a proud owner of the Headrush Gigboard, an amp modeller and multi effects unit with touch screen.

This gear is really awsome und opens guitarists a new world of effects and guitar amps. One manko, there is no editing software for computers available. Although programming the unit with the touch screen is very easy, it’s very tedious for my old back to bend down to the touch panel for programming when the unit is on the floor.;)

The Gigboard has a „Midi in“ so that it’s possible to connect a MIDI controller so that you can put it on the table, programming it and with the MIDI controller you can switch the presets. But, good MIDI controllers nearly costs as much as the gigboard and they are way to oversized for the purposes that I want to use it for. 

I only need the four switches of the Gigboard in a housing with foot switches on the floor.

But, hey, there are the Arduinos, with this it should be possible to tinker something and, it’s possible to tinker something.:-)

Research

After searching a bit on the net I found the bassic.de forum, where a user made software for an Arduino to send MIDI commands. There I found also a circuit for a simple MIDI controller. 

So I equipped a breadboard with an Arduino nano and four momentary switches, LEDs and a MIDI connector.

Picture of the wired breadboard

Circuit

Circuit

The MIDI commands

The MIDI possibilties of the Gigboard are not well documented, there is a table with Control Change numbers (CC#) for initiating miscellaneous actions on the Gigboard.

Table of CC#s

It’s not difficult to see, that the four foot switches have the CC# 50-53, for switching to „On“ you have to give values between 64 and 127, so I put this in the Arduino sketch. But it did not work as expected.:-(

The foot switches have two functions, with a short press you switch the presets or stomp boxes, with a long press the functions VIEW, HANDSFREE, LOOPER and TUNER are activated.

Did I send a CC#(50, 127) to the device, but the presets and stomp boxes were not activated, only the functions that are activated with a long press. That wasn’t what I wanted.:-(

After an intense search on the net, I found the solution that there have to be two CC# commands to be send.

First e.g. CC# (50,64) then CC# (50,0), but that didn’t work either. After some time of thinking I got the idea to set a delay between the both commands and that was the trick, it worked.:-)

Concept

Now I thought about a concept, that works best for me. At least I decided to put five switches on the foot controller. Four switches that are representing the four switches of the Gigboard, the fifth is for switching between short and long press. I did not find another solution, perhaps a reader of this has an idea?

As a basic framework I downloaded the sketch and the midi.h from the user Willie on bassic.de and customized it. The whole thing is very simple, I didn’t want something programmable, only an „extension“ of the four switches of the Gigboard to the ground.

How it works

If you power up the circuit, all LEDs will flash one after the other forward and also back to show that the controller is ready. The single switches work like they work on the Gigboard. If you activate one of the four switches, the corresponding LED will flash and the switching process will be initiated.

To initiate a long press you press the fifth foot switch, the LED will burn permanently. Then push one of the four other switches to initiate one of the functions VIEW, HANDSFREE, LOOPER, TUNER. You now use the four switches as you know it from your Gigboard, but there is a little exception in HANDSFREE mode, you only can leave this mode with a long press on the fourth switch. To reach this, just press the fifth switch (long press) and then the fourth switch and HANDSFREE will be exited.

Something like that is of course not suitable for the stage, because you have to press two buttons to reach the special modes, but that was not my intention, I just searched a solution to work with my gigboard, when it is on a table and to have the possibility to use the foot switches.

The Arduino Sketch

My customized Sketch looks like this:

Updated 23/02/23 – Only the first LED were lit

Customized Sketch

This was just the first part, in part two I will describe the assembling of the MIDI Controller, this will take while, because first I have to order the parts for the project. Then I wish good luck with testing.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert