HID Controller

Hallo ich bin neu hier;)

Ich würde gerne einen Controller bauen mit ein paar Tastern und Potis. Mit denen ich eine Musiksoftware auf dem PC steuern kann. Ist dies mit einem Arduino möglich? Und in wie weit muss man dafür spezielle Programmierkenntnisse besitzen? Ich habe schon einen Joystick umgebaut der HID Signale zum PC schickt diesen werden dann dort von einer Software umgesetzt in MIDI Signale. Kann man einen Arduino als HID Controller wie einen Joystick benutzen? Kennt da jemand vielleicht schon Projekte mit Beschreibungen?

Danke euch!!

Ja, solche Sachen kannst Du machen, am einfachsten mit dem Arduino Leonardo, da dieser die USB-Unterstützung direkt im Microcontroller hat. In der IDE sind Beispiele für Maus und Tastatur vorhanden, die Erweiterung für einen Joystick müsstest Du noch machen, wenn Du das brauchst.

Direkt auf Midi aufsatteln wäre in dem Fall doch die bessere Lösung:

http://www.watterott.com/de/MIDI-Breakout http://www.watterott.com/de/SparkFun-MIDI-Shield

In der IDE sind Beispiele für Maus und Tastatur vorhanden...

Das heißt ohne etwas auf dem Arduino zu Programmieren könnte dieser Befehle von Tastern und Potts verstehen und an den PC weiter leiten? Die Befehle sind dann in HID und müssten am Rechner selber in MIDI Signale umgewandelt werden? Hab ich das richtig verstanden.

Danke für eure Hilfe

Das heißt ohne etwas auf dem Arduino zu Programmieren könnte dieser Befehle von Tastern und Potts verstehen und an den PC weiter leiten?

Nein, das heisst, es gibt Beispiele und Bibliotheken, die Dir zeigen, wie man das macht und einen grossen Teil der Low-Level-Sachen übernehmen.

Die Befehle sind dann in HID und müssten am Rechner selber in MIDI Signale umgewandelt werden?

Richtig, für den Rechner ist es identisch, wie wenn Du die Maus bewegen würdest oder auf der Tastatur etwas eingibst.

Wenn Du aber Midi-Signale haben willst, dann würde ich den Post von sth77 beachten, der direkte Fall ist wahrscheinlich wirklich einfacher.

Habe soeben dieses hier gefunden:

http://www.arduino.cc/en/Tutorial/JoyStick

Das sieht schon mal sehr gut aus. Ich könnte an den Analog Eingang doch 5 Potis hängen? Müsste dann aber den Code dem entsprechend ändern oder? Könnte ich an die andere Seite am digitalen Eingang Taster hängen sie können ja nur den Zustand 1 und 0 also an und aus sind diese damit digital? Oder werf ich da was durcheinander?

Danke euch

In der Befehlsreferenz findet man schnell diese Übersicht: http://arduino.cc/en/Reference/MouseKeyboard Klick auf die Befehle, dann gibt es dazu auch Beispiele. Den Leonardo als Joystick zu benutzen ist sicher irgendwie möglich, aber für mich zu komplex. Ich komme mit den meist Möglichkeiten aus, die mir nativ geboten werden: Maus und Tastatur.

sth77: In der Befehlsreferenz findet man schnell diese Übersicht: http://arduino.cc/en/Reference/MouseKeyboard Klick auf die Befehle, dann gibt es dazu auch Beispiele. Den Leonardo als Joystick zu benutzen ist sicher irgendwie möglich, aber für mich zu komplex. Ich komme mit den meist Möglichkeiten aus, die mir nativ geboten werden: Maus und Tastatur.

Ich möchte einfach einen eigenen Musik-Controller bauen mit einem Board das nicht 50 bis 100 Euro kostet. Es gibt einige Boards auf dem Markt die nur für Joysticks entwickelt worden sind. Die Alternative mit einem Arduino Board scheint mir sehr passend.

Der Link, den Du gefunden hast, beschreibt nur, wie man einen analogen Joystick an den Arduino anschliesst, aber nicht, wie man diese Daten so aufbereitet, dass der PC sie als USB Joystick war nimmt. Klar der analoge Joystick ist nichts anderes als ein Button und zwei Potis, ich verstehe allerdings nicht, wie Dir das nützen sollte.

Ich möchte einfach einen eigenen Musik-Controller bauen

Was soll der können, mit welcher Software soll er interagieren, genügen Keyboard-Events oder musst Du Midi-Signale haben?

pylon: Was soll der können, mit welcher Software soll er interagieren, genügen Keyboard-Events oder musst Du Midi-Signale haben?

Es sollten 12 Taster zur Verfügung stehen dazu 4 Potis. Die Software mit der er agieren soll ist Ableton Live. Ich habe das ganze schon mit einem von mir modifizierten Joystick probiert und es funktioniert. Nur leider hat der Joystick zu wenig Anschlüsse für Taster bzw Potis. Deswegen bin ich auf der Suche nach einer Lösung. Von C hab ich leider fast überhaupt keine Ahnung, irgendwann mal im Studium gehabt;) Die Software die ich nutze um HID Signale in Midi zu verwandeln heißt Controller Mate http://www.orderedbytes.com/controllermate/ für MacOSX.

Ist das schwierig umzusetzen wie würdet ihr das einschätzen von den Anforderungen?

@pylon hast du eine Idee wie man das verwirklichen könnte?

Das dürfte eigentlich realisierbar sein. Ich würde allerdings definitiv einen Arduino Leonardo verwenden. Der ist in etwa gleich teuer wie ein UNO, kann allerdings mehr und hat den Vorteil des integrierten (in die CPU) USB-Anschlusses. Die 12 Taster kannst Du auf die digitalen Pins 0-11 legen, die Potis gehen dann auf die Analog-Eingänge. Die Taster kannst Du direkt als Tastatur-Anschläge emulieren, die Poti-Werte sind etwas schwieriger. Wie kann ControllerMate denn Analog-Werte entgegen nehmen? Eine Möglichkeit wäre ein Bitmuster durch simulierte Tastendrücke. Möglicherweise auch über die Maus-Emulation. Hängt ganz von Deiner Software auf dem Mac ab.

pylon: . Wie kann ControllerMate denn Analog-Werte entgegen nehmen? Eine Möglichkeit wäre ein Bitmuster durch simulierte Tastendrücke. Möglicherweise auch über die Maus-Emulation. Hängt ganz von Deiner Software auf dem Mac ab.

Danke das wäre wirklich toll wenn ich meine Idee verwirklichen könnte. Danke für deine Hilfe erstmal wirklich sehr nett!!

Also ControllerMate nimmt die Werte entgegen als HID Signal also Tastendrücke. An dem Joystick den ich umgebaut habe hängen die Buttons an den Anschlüssen für die Druckknöpfe am Joystick. ControllerMate erkennt diese Signale wenn ich die Knöpfe betätige und im Programm selber kann ich dann den Knöpfen unterschiedliche MIDI Noten zuordnen.

Das Problem für mich wird wahrscheinlich das Programmieren des Arduino Boards sein.

Wird der Code sehr komplex sein mit den Potis?

Hatte diesen Code gefunden:

http://www.arduino.cc/en/Tutorial/JoyStick

Dort wird ja mit zwei Potis gearbeitet. Wenn ich mehr benutze muss dieser ja angepasst werden plus die Taster.

ControllerMate erkennt diese Signale wenn ich die Knöpfe betätige und im Programm selber kann ich dann den Knöpfen unterschiedliche MIDI Noten zuordnen.

Das ist mir schon klar, dass Knöpfe in Tastendrücke umgewandelt werden können. Aber wie wird die Position des Joysticks (das sind dann bei Dir die Potis) an den ControllerMate übermittelt? Dort hast Du einen kontinuierlichen Wert und nicht einen binären.

Daran muss ich noch arbeiten.Hab das noch nicht genau hinbekommen. Controller Mate empfängt die Signale aber wie ich sie genau umsetzen muss hab ich noch nicht genau heraus gefunden.

Wie siehts mit dem Code aus wird der kom plex werden?

Bedankt!

Der Code für Tasteneingaben ist recht einfach umzusetzen:

int Taste1 = 2;
int Taste2 = 3;
// und so weiter...

void setup() {
  pinMode(Taste1 , INPUT_PULLUP);
  pinMode(Taste2 , INPUT_PULLUP);
  // und so weiter...
  Keyboard.begin();
}

void loop() {
  if (digitalRead(Taste1)==LOW) Keyboard.print("1");
  if (digitalRead(Taste2)==LOW) Keyboard.print("2");
  // und so weiter...
}

Ich find das echt super wie einem hier geholfen wird und wieviel Mühe ihr euch macht. Dickes Danke dafür!!

Okay der Code für die Taster erschließt sich mir. Das ist ja nicht all zu kompliziert. Der für die Potis ist aber bestimmt komplizierter oder? Wie fang ich da an oder wo kann ich darüber was lesen? Könnte ich den Code aus dem Joystick Projekt ab ändern auf 5 Potis?

Im genannten Joystick-Tutorial geht es nur um die Ansteuerung von zwei Potis, die Werte werden über die serielle Schnittstelle ausgegeben. Dein System erkennt damit keinen Joystick, dessen Tasten du abfragen kannst. Vielleicht ist ja eher ein Joywarrior der Firma Codemercs was für dich.

sth77: Dein System erkennt damit keinen Joystick, dessen Tasten du abfragen kannst.

Das versteh ich nicht ganz? Heißt das der PC erkennt keinen Joystick? Das soll er auch nicht. Er soll einfach nur die Signale vom Board bekommen in HID von den Tastern und den Potis.

Ist ein solcher Kontroller mit einem Arduino zu schwer umzusetzen oder einfach die falsche Wahl? Hab bei den ganzen anderen Tipps irgendwie das Gefühl? Bitte klärt mich auf.

Ist ein solcher Kontroller mit einem Arduino zu schwer umzusetzen oder einfach die falsche Wahl?

Wenn Du ein mehr oder weniger fertiges Gerät haben willst, dass Du einfach in Deinen Rechner einstöseln kannst und dann tut's, dann dürfte der Arduino für Dich wirklich falsch sein.

Bei dieser Plattform ist meist einiges an Eigenarbeit erforderlich, häufig auch die Bereitschaft, sich neue Kenntnisse anzueignen und sich etwas mit der Programmierung zu beschäftigen. Von den Hardware-Möglichkeiten her ist der Arduino für Deine Aufgabe sehr gut geeignet, aber da die Problemstellung etwas exotisch ist (zumindest wie ich sie bisher verstanden habe), dürfte sich nicht ein pfannenfertiges Umsetzungskonzept finden lassen.

PhilONE: Das versteh ich nicht ganz? Heißt das der PC erkennt keinen Joystick? Das soll er auch nicht. Er soll einfach nur die Signale vom Board bekommen in HID von den Tastern und den Potis.

Schließt du den Arduino Leonardo an, so erscheint im Geräte-Manager von Windows 7 nicht irgendein HID-Gerät, sondern ganz spezifisch eine zusätzliche HID-Tastatur und eine HID-konforme Maus. Das sollte unter MacOS genauso ablaufen. In einem Blogeintrag zum Leonardo habe ich dazu auch einen Screenshot eingestellt: http://sth77.blogspot.de/2012/05/arduino-leonardo.html Und nur auf diese Geräte kannst du zugreifen. Kein Joystick gelistet - kein Joystick ansprechbar.

Das umgeht man elegant mit den JoyWarrior-Chips, in den Datenblättern findet man die Anschlussbelegung. Durch die Vielzahl unterschiedlicher Modelle bzw. Typen sollte man deinen Ansprüchen schon gerecht werden, zumindest was die Anzahl der Tasten betrifft. 5 Potis anzuschließen sollte ebenso funktionieren, wenn man zwei JoyWarriors-ICs mit jeweils 3 Achsen nutzt.