Geschrieben am

Arduino Joystick Tutorial – DIY MIDI Controller E17

arduino-joystick-tutorial-deutsch-anschliessenEinen Joystick an den Arduino anschließen? Kein Problem mit diesem Tutorial. Wir schauen uns die Hardware an und programmieren verschiedene Möglichkeiten um MIDI-Daten zu erzeugen und unseren Synthesizer damit zu steuern. Nach der letzten kurzen Folge, heute mal wieder länger und ganz ausführlich.

Hier gibt’s den Programm-Code:

int joyX = 0; //Pitch Bend
int joyY = 0; //CC1 und CC20

int pitchBend = 0;
int controllerWert = 0;

int button = LOW;
int buttonAlt = LOW;
int schalter = 0;

void setup() {
 Serial.begin (9600);
 pinMode (8, INPUT_PULLUP);
}


void loop() {
 joystickAbfragen();
 buttonAbfragen();
}


void joystickAbfragen() {
 joyX = analogRead(A0);
 if (joyX > 530) {
 pitchBend = map(joyX,530,1023,65,127);
 sendeMIDI(224,0,pitchBend);
 }
 if (joyX < 520) {
 pitchBend = map(joyX,0,520,0,63);
 sendeMIDI(224,0,pitchBend);
 }
 else if ((joyX > 520 && joyX < 530) && pitchBend != 64) {
 pitchBend = 64;
 sendeMIDI(224,0,pitchBend);
 }
 
 joyY = analogRead(A1);
 if (joyY > 530) {
 controllerWert = map(joyY,530,1023,0,127);
 sendeMIDI(176,1,controllerWert);
 }
 else if (joyY < 520) {
 controllerWert = map(joyY,520,0,0,127);
 sendeMIDI(176,20,controllerWert);
 }
}


void buttonAbfragen() {
 button = digitalRead(8);

 if (button == LOW && buttonAlt == HIGH) {
 if(schalter == 0){
 sendeMIDI(176, 64, 127);
 schalter = 1;
 }
 else {
 sendeMIDI(176, 64, 0);
 schalter = 0;
 }
 }
 buttonAlt = button;
}


void sendeMIDI(int statusByte, int dataByte1, int dataByte2) {
 Serial.write(statusByte);
 Serial.write(dataByte1);
 Serial.write(dataByte2);
}

12 Gedanken zu „Arduino Joystick Tutorial – DIY MIDI Controller E17

  1. da hat man ja viele möglichkeiten für programmen

  2. Hallo Götz,

    als Erstes vielen Dank für Deine netten und guten Videos.
    Ich habe ein bischen mitgebaut und möchte am Ende einen Midi Controller mit 9 Fadern, 8 Potis und 17 Schaltern haben.
    Bei mir funktioniert die Klättung der Potis nicht. Ich sende dauert midi- Signale.

    Hier mein Sketch:

    \\
    int controlChange = 176; //Midi Kanal 1

    int potiPin[] = {A0,A1,A2,A3,A4,A5};
    int controllerNummer[] = {21,22,23,24,25,26};
    int controllerWert[] = {0, 0, 0, 0, 0, 0};
    int controllerWertAlt[] = {0, 0, 0, 0, 0, 0};
    int potiWert[] = {0, 0, 0, 0, 0, 0};

    int i = 0;

    int smoothWert = 0;

    void setup() {
    Serial.begin(9600);
    }

    void loop() {
    for (i = 0; i <6; i++) {
    potiWert[i] = analogRead(potiPin[i]);
    smoothWert = 0.4 * smoothWert + 0.6 * analogRead (potiPin[i]);
    controllerWert[i] = map(smoothWert,0,1023,0,127);

    if (controllerWert[i] != controllerWertAlt[i]){

    Serial.write(controlChange);
    Serial.write(controllerNummer[i]);
    Serial.write(controllerWert[i]);
    }
    controllerWertAlt[i] = controllerWert[i];

    }
    }
    \\

    Hast Du eine Idee?

    Zu mir, ich bin ganz neu in ARDUINO, habe aber schon einige Röhrenverstärker für Gitarre gebaut, von 5 (EL84) bis 100 (4*EL34) Watt.

    Mach weiter
    Gruß,
    Peppi

    1. Hy Götz,

      etwas unübersichtlich hier.
      Mein neuer Sketch geht ein bisschen besser, alles gut so?

      int controlChange = 176; //Midi Kanal 1

      int potiPin[] = {A0,A1,A2,A3,A4,A5};
      int controllerNummer[] = {21,22,23,24,25,26};
      int controllerWert[] = {0, 0, 0, 0, 0, 0};
      int controllerWertAlt[] = {0, 0, 0, 0, 0, 0};
      int potiWert[] = {0, 0, 0, 0, 0, 0};
      int smoothWert[] = {0, 0, 0, 0, 0, 0};

      int i = 0;

      //int smoothWert = 0;

      void setup() {
      Serial.begin(9600);
      }

      void loop() {
      for (i = 0; i <3; i++) {
      potiWert[i] = analogRead(potiPin[i]);
      smoothWert[i] = 0.8 * smoothWert[i] + 0.2 * analogRead (potiPin[i]);
      controllerWert[i] = map(smoothWert[i],0,1023,0,127);

      if (controllerWert[i] != controllerWertAlt[i]){

      Serial.write(controlChange);
      Serial.write(controllerNummer[i]);
      Serial.write(controllerWert[i]);
      }
      controllerWertAlt[i] = controllerWert[i];

      }
      }

      Gruß,
      Peppi

      1. Hi Peppi,
        du brauchst „smoothWert“ UND „potiWert“ nur beide, wenn du wie ich im Film auch beide Werte miteinander vergleichen willst. D.h. du brauchst nur:
        potiWert[i] = 0.8 * smoothWert[i] + 0.2 * analogRead (potiPin[i]);
        VG
        Götz

  3. wann geht es weiter?mit den Midicontroller

    1. Dieses Wochenende! 🙂

  4. ist es auch möglich ein Touchpad (Laptop) oder Touchdigitizer an den Arduino zu klemmen? So n Korg Kaoss Pad Klon wäre doch was tolles 😉

    1. Ja, solange es ein einfaches kapazitives Touchpad ist mit dem du nur einen einzelnen Finger erfassen kannst ist es eigentlich nicht schwieriger als den Joystick anzuschließen.

      1. <<hallo wo bekommt man so ein Touchpad bei ebay habe ich keins gefunden

        1. Also nen Touchpad kannst du z.B aus einem alten Laptop ausbauen.
          Einen Digitzer gibts auch bei Ebay oder beim Fachhändler aber da muss man sich dann schlau machen ob der dann auch wie Götz oben beschrieben hat nur ne 1 Finger Bedienung hat.
          Denke alte Touchscreen Navigationsgeräte sollten so etwas haben.
          Beispielsweise http://www.ebay.de/itm/Touch-Screen-Digitizer-Touchscreen-Navigon-8110-8310-8100-8310-/231073719837?hash=item35cd11261d

  5. Ja so einer könnte gehen oder aus ein Novation midi controller ich habe so ein kann ich ja mal testen ob das geht

Kommentar verfassen