Launchpad: Key toggle, LED Feedback

hgpa

2016-01-10 19:38:18

Hallo!

Ich bin neu in diesem Forum, arbeite mich gerade in die Programmierung ein...

Anfänge sind gemacht, aber jetzt habe ich ein Problem:

3 Tasten sollen ihre Farbe bei Druck umschalten: ok
Wenn eine andere der drei gedrückt wird, sollen die anderen auf die Grundfarbe gehen: ok
Beide Möglichkeiten funktionieren je für sich, aber wenn
beide Module zusammenwirken, soll natürlich eine Taste beim ersten Druck einschalten,
beim zweiten Druck wieder umschalten auf Grundfarbe, und das funktioniert nicht,
irgendwo ist da der Wurm drin.
Ich wäre dankbar für einen Tipp!

Mit freundlichen Grüßen HG

In der Anlage das Steuerfile für das Programm.
Farbumschalttest.bmtp
(1.86 KiB) Downloaded 160 times

florian

2016-01-11 12:16:55

Hallo,
ich hab mir das mal angeguckt. Folgende Probleme habe ich gesehen:

Hauptproblem: Die "Andere Taster zeigen" Translators resetten auch die Taste, die im vorigen Translator auf einen anderen Wert gesetzt wurde. Also z.B. Translator 0.1 setzt 44 auf 15, aber 0.2 setzt 44 dann direkt auf 0x3C. Im Log Window kann man das gut nachvollziehen. Die Lösung ist, dass "Andere Taster zeigen" nur die anderen Taster, und nicht den Taster der Incoming action auf einen Default Werts setzen.

Nebenproblem:
Jeder Taster sollte eine eigene globale Variable benutzen, also z.B. g0, g1, etc. Andererseits übernimmt die 2. Taste den Status der ersten Taste. Dann müssen natürlich auch die Zustände der anderen Taster in den "Andere Taster anzeigen" Translators wieder auf 0 gesetzt werden.

Ich hab das mal im angehängten Projekt umgesetzt. (und auch die Keystrokes in ein eigenes Preset verfrachtet).
Florian
Attachments
Farbumschalttest1.bmtp
(2.07 KiB) Downloaded 161 times

florian

2016-01-11 12:45:15

Das bisherige Verfahren sollte funktionieren, ist aber in manchen Punkten etwas umständlich:
- relativ viele Translators machen das gleiche
- die Werte für RESET, ON und OFF sind hardkodiert und verteilt über die Translators

Ich hab das mal im angehängten Preset ver(schlimm?)bessert:
Der Init Translator 1.0 legt erstmal drei Variablen ga, gb und gc an, die die jeweiligen LED Werte für RESET, OFF und ON angeben. Um eine LED anzuschalten, wird sie also auf gc gesetzt, usw. Damit kann man das Farbschema sehr einfach anpassen, indem man hier einfach einen anderen Wert einträgt und das Projekt neu startet (oder das Preset kurz deaktiviert und dann wieder aktiviert).

Weiterhin geben jetzt g0, g1 und g2 die momentane Farbe für die Tasten 1, 2 und 3 vor. Dabei kann also jede dieser Variablen den Wert ga, gb oder gc haben. Im Init Preset werden alle auf ga gesetzt, also auf RESET.

Der Timer Translator 1.1 reagiert auf einen Timer namens "DisplayKeys" und tut dann nichts anderes als alle 3 LEDs auf ihre jeweiligen Werte -- vorgegeben durch g0, g1 und g2 -- zu setzen.

Die restlichen 3 Translators machen nun für jede Taste folgendes (am Beispiel der ersten Taste 0.2):
Erstmal wird über Umweg von der lokalen Variable pp die g0 Variable auf ON gesetzt, oder, wenn sie bereits ON (gc) ist, auf OFF umgeschaltet (=gb). Dann werden noch die anderen LEDs g1 und g2 auf RESET (ga) gesetzt. Als Outgoing Action wird lediglich der Timer DisplayKeys mit 0ms Verzögerung (also sofort) angetriggert. Der sorgt dann dafür, dass die MIDI Messages auch zum Launchpad gesendet werden. Diese Art von Timer erhöht übrigens nicht die Latenz.

Anbei das Projekt dazu.

Man könnte sich noch einige andere Optimierungen vorstellen, z.B. dass nicht immer alle 3 LEDs gesetzt werden, selbst wenn sie bereits den Wert haben. Oder, dass man eine globale Variable nimmt, um die momentan aktive LED zu merken (z.B. 0 für 0x44, 1 für 0x45, etc.) und eine zweite globale Variable für die LED Farbe der ausgewählten LED. Alle anderen LEDs sind dann implizit RESET.

Hoffe, das gibt ein paar Anregungen!
Florian
Attachments
Farbumschalttest2.bmtp
(2.36 KiB) Downloaded 175 times

hgpa

2016-01-11 13:32:26

Gaaaaanz herzlichen Dank für deine schnelle Reaktion, Florian!

Damit komme ich dann sicherlich klar! Werde mich dranmachen, wenn ich heute abend etwas Zeit habe.

Zum Hintergrund vielleicht noch, wenn es interessiert: Mein Projekt insgesamt macht folgendes:
Ansteuern des Notendruckprogramms Sibelius mit dem Launchpad mini von Novation:
Alle relevanten Befehle, Steuerungen, Notenwerte, Pausen, Sonderzeichen für den Notendruck je auf einer Direkttaste,
geht sehr viel schneller als das elende Mausgeschubse oder abenteuerliche Tastaturkombinationen.....
Und da helfen natürlich die Farbcodierungen sehr: man sieht, welcher Notenwert o.a. angewählt ist, da die Farbe
dort dann anders ist.

Bei Interesse gerne mehr.

Nochmals vielen Dank für deine Hilfe.
Ich melde mich noch mal kurz, wenn ich Erfolg hatte

HG