Einen 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); }
da hat man ja viele möglichkeiten für programmen
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
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
wann geht es weiter?mit den Midicontroller
Dieses Wochenende! 🙂
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
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 😉
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.
<<hallo wo bekommt man so ein Touchpad bei ebay habe ich keins gefunden
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
Eben auf die schnelle bei Amazon gefunden. Nur halt sehr teuer http://www.amazon.de/Asiawill-TFT-Touchscreen-Shield-Arduino/dp/B00K7ZMMHM/ref=sr_1_14?ie=UTF8&qid=1443828578&sr=8-14&keywords=touchscreen+arduino
Ja so einer könnte gehen oder aus ein Novation midi controller ich habe so ein kann ich ja mal testen ob das geht
Hallo und HILFE! Habe vergeblich versucht Joysticks mit deinem Code in mein Projekt zu integrieren aber es scheitert daran das fortlaufend MIDI signale gesendet werden obwohl ich den joystick nicht bewege… Kannst du bitte den sketch updaten mit einem smooth befehl und einem Multiplexer array (oder wie man das auch nennt) damit man den code einfach kopieren kann? Leider bin ich des programmieren nicht mächtig genug um mir selbst zu helfen… Mein projekt liegt deshalb zurzeit leider auf eis und ich würde mich sehr über deine hilfe freuen!!