Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Der Einstieg in die MobaLedLib:

Stammtische

aktuell verwendete Versionen


Python MobaLedLib

Verwendung mit der MoBa-Zentrale

Steuerung der MobaLedLib-Effekte

Erste Hilfe

Bewegung mit der MLL

Servoplatine

Sound mit der MLL

Anwendungsbeispiele:

3D-Druck

Workshops

Entwicklungen MoBa-Universum

Platinen van Theo

MobaLedLib Sonderplatinen

Drehscheibensteuerung LocoTurn V 1.7

Drehscheibe (V0.6)

OLED Displays

Infrared to Z21 Bridge

Lokplatinen und Adapter

Hilfereiche Themen

Wissen für Fortgeschrittene

Impressum & Datenschutz

Für Wiki-Editoren:

Faszination Modellbau - 30.10. - 01.11.2026

wir sind dabei

INTERMODELLBAU - Dortmund - 22.-25. April 2027

wir sind dabei

anleitungen:prog_gen:led-to-var

Die Wunderwaffe LED-to-VAR

Wie sich auf einfachste Weise Funktionen beim Erreichen bestimmter Helligkeitswerte schalten lassen und wie man damit jeden Ablauf optimieren kann.
von Michael

Diese Anleitung soll euch die Angst vor einer komplett unterschätzten Funktion der MobaLedLib nehmen. Oftmals wird die Funktion als ein Gimmick für Profis dargestellt, doch im Grunde ist sie ganz einfach zu verstehen.

Los geht es mit dem Menü, das nach dem Auswählen der Funktion LED-Werte als Variable (auch bekannt als LED_to_Var) im Expertenmodus erscheint. Bereits hier zeigt sich eine einfache Parametereingabe.

Zielvariable

Hier ist man also völlig frei und kann als Variable den spezifischen Namen der gewünschten Funktion eingeben, z. B. „Heissluftballon“. Wichtig ist - wie bei allen Variablen - dass der verwendete Name einzigartig ist, denn der Name wird hierdurch zu einem Schalter. Richtig: Statt einer DCC-Adresse schaltet das Wort Heissluftballon zukünftig LEDs oder startet den Gasbrenner zum Abheben.

LED Nummer Offset

Okay, ich gebe zu, das ist ein bisschen unglücklich formuliert und vermutlich ist das die größte Hürde. Was hier eigentlich gemeint ist, ist die Frage nach der referenzierten LED. Also der LED, die wir auslesen wollen bzw. die maßgeblich dafür ist, wann bestimmte Funktionen ausgelöst werden. Damit diese Hürde ein für allemal beseitigt wird, gehe ich in diesem Kapitel möglichst einfach darauf ein.

Wichtig: Die Funktion LED-to-VAR bezieht sich immer auf die Funktion, die sich direkt über ihr befindet. Um das besser zu verstehen, folgt ein einfaches Beispiel: Wir schalten eine RGB-LED, die nur rot leuchtet, wenn sie eingeschaltet ist und gar nicht leuchtet, wenn sie ausgeschaltet ist. Das ist für den Einstieg sehr einfach. Direkt darunter fragen wir mit der LED-to-Var-Funktion genau dieses rote Leuchten ab. Sobald nun die vergebene Variable „Heissluftballon“ aktiv wird (also wenn die rote LED mit irgendeiner Helligkeit leuchtet, die größer als 0 ist), wird der Gasbrenner im Heißluftballon gezündet und dieser hebt ab.

Wenn bis hierhin alles klar ist, schauen wir uns genau an dieser Stelle den LED Nummer Offset genauer an. Wie wir oben gelernt haben, bezieht sich die Abfrage immer auf den ersten Kanal der Zeile, die direkt über der LED-to-VAR-Funktion steht, in unserem Fall also die RGB-LED, deren roter Kanal im aktiven Zustand leuchtet. Man erkennt sie im Screenshot an der rot unterlegten 255 die darüber mit Kanal 0 gekennzeichnet ist. Die grün unterlegte 0 bezieht sich exakt auf diesen Kanal. Gelb unterlegt ist lediglich die Wenn-Bedingung (größer als null), worauf ich weiter unten eingehe.

In einer Tabelle dargestellt teilt sich die erste LED auf drei Kanäle auf. Offset (Abstand) 0 entspricht hier also dem roten Kanal dieser LED:

LED-Nr. Kanal Offset (Abstand) Bemerkung
1 Rot 0 LED-to-VAR fragt genau diesen Kanal ab. Es ist der erste Kanal der vorangegangen Zeile. Daher gibt es keinen Abstand.
1 Grün 1 Dieser Kanal folgt auf den abgefragten Kanal. Der Offset (Abstand) zu diesem ist daher einen Kanal höher, also Abstand 1.
1 Blau 2 Der blaue Kanal liegt somit zwei Kanäle über dem ersten Kanal, den die LED-to-VAR-Funktion referenziert, also Abstand 2.

Das war bisher ein Kinderspiel, oder? Dann darf's jetzt ein bisschen mehr sein, oder? Sehr gern.
Bevor ich aber jetzt auf Werte unterhalb der LED-Variable eingehe (ja, das geht auch), schauen wir uns an, wie es sich verhält, wenn wir eine Funktion abfragen müssen, die aus mehr als einer RGB-LED besteht oder anders gesagt aus mehr als drei Kanälen. Das könnte beispielsweise ein belebtes Haus sein, immerhin kann die LED-to-VAR-Funktion bis zu 31 Kanäle abfragen, was also locker für zehn RGB-LEDs innerhalb einer Funktion ausreicht. Doch ich mache lieber mit zwei WS2811 bzw. sechs Kanälen weiter.

Im Folgenden nehmen wir uns die MicroStepper Pro-Platine als Referenz. Das ist im Übrigen ein sehr praktisches Beispiel, weil es sehr wahrscheinlich ist, dass beim Bewegen des Steppermotors auch passende Licht- oder Soundfunktionen ausgelöst werden sollen. Auf die Erklärungen zum Pattern Configurator verzichte ich an dieser Stelle. Wichtig ist hier nur, dass der Steppermotor sechs Sekunden lang in die eine Richtung fährt und am Ziel für zehn Sekunden pausiert, bevor er für sechs Sekunden wieder zurück fährt. Genau das zeigt der folgende Screenshot.
Der aufmerksame Leser wird jetzt bereits erkennen, dass die Kontroll-LED in jeder dieser Phasen einen anderen Helligkeitswert hat - dazu später mehr.

Eigentlich bleibt alles wie beim vorangegangenen Beispiel. Wir referenzieren lediglich einen anderen Kanal, nämlich den blauen Kanal des zweiten WS2811, der sich auf der Stepperplatine befindet. Dieser hat einen Abstand von fünf Kanälen zum ersten Kanal der ersten LED.
Die grün unterlegte 5 bezieht sich exakt auf diesen blauen Kanal. Gelb unterlegt ist wieder die Wenn-Bedingung (größer als null).

Doch wie kommt man auf diese 5?
Dazu erweitern wir einfach mal die oben gezeigte Tabelle um drei Kanäle, denn die Funktion über der Abfrage besteht jetzt aus zwei LEDs.

LED-Nr. Kanal Offset
1 Rot 0
1 Grün 1
1 Blau 2
2 Rot 3
2 Grün 4
2 Blau 5

Bevor wir das Kapitel LED Nummer Offset schließen, zeige ich noch - wie oben versprochen - das Auslesen von LEDs, die nach der LED-to-VAR-Funktion aufgeführt werden. Auch wenn diese Funktion gegeben ist, so bleibt es bei der wichtigsten Regel: Die LED-to-VAR-Funktion bezieht sich immer auf die Funktion, die sich direkt über ihr befindet. Das muss mindestens ein Kanal sein. Im folgenden Screenshot wollen wir den grünen Kanal der unteren RGB-LED abrufen. Für die Zählweise muss man die drei Kanäle über der LED-to-VAR-Funktion mitzählen und dann bei der darunter positionierten LED weiterzählen.

In der Tabelle gestaltet sich das nun so:

LED-Nr. Kanal Offset
1 Rot 0
1 Grün 1
1 Blau 2
LED-to-VAR-Funktion
2 Rot 3
2 Grün 4
2 Blau 5

Vergleichstyp ( = != < > & !& )

Hier stehen sechs Operatoren zur Verfügung, mit denen man so gut wie jeden Zustand abfragen kann. Die ersten vier Operatoren sind selbsterklärend, die letzten beiden sind extrem mächtig, da sich damit unterschiedliche Funktionen auf einen Helligkeitswert legen lassen. Bevor ich näher darauf eingehe, schauen wir uns die Funktion der ersten vier Operatoren in der Tabelle an:

Operator Bedeutung Beispiel für „wahr“
= Abgefragter LED-Wert und Bedingung müssen gleich sein Aktiv, wenn der abgefragte Helligkeitswert einer LED erreicht wird (z. B. „Kanal 0 = 255“)
!= Abgefragter LED-Wert und Bedingung dürfen nicht gleich sein Aktiv, wenn der abgefragte Helligkeitswert einer LED nicht zutrifft (z. B. „Kanal 0 ≠ 0“)
< Abgefragter LED-Wert kleiner sein als Bedingung Aktiv, solange der abgefragte Helligkeitswert einer LED unterschritten bleibt (z. B. „Kanal 0 < 127“)
> Abgefragter LED-Wert größer sein als Bedingung Aktiv, sobald der abgefragte Helligkeitswert einer LED überschritten wird (z. B. „Kanal 0 > 127“)
& Binärer Vergleich siehe unten
!& Binärer Vergleich negiert siehe unten

Kommen wir nun zum binären Vergleich
Das ist in der Tat etwas abstrakt, aber wer diesen Part hinter sich hat, der wird automatisch zum LED-to-VAR-Profi. Doch bevor wir uns dem binären Zahlensystem widmen, möchte ich folgende Frage beantworten:
Wozu braucht man das eigentlich?
Die oben bereits erklärten Operatoren können nicht miteinander kombiniert werden. Es ist also nicht möglich, eine Licht- oder Soundfunktion verschiedenen Helligkeitswerten zuzuordnen (z. B. kleiner-gleich). Als Beispiel für die Notwendigkeit nutze ich genau die Anwendung, mit der ich gelernt habe, was es mit den binären Vergleichen auf sich hat: Das Rolltor!

Dazu erkläre ich den Ablauf, der am Ende erreicht werden soll:

  1. Das Rolltor ist geschlossen, alle LEDs sind aus
  2. Ein Auto nähert sich von außen und verlangt Zugriff zur Tiefgarage.
    Bevor sich das Rolltor in Bewegung setzt, beginnt innen und außen ein rotes Warnlicht zu blinken.
  3. Drei Sekunden später setzt sich das schwere Rolltor in Bewegung.
    Gleichzeitig geht das Licht in der Tiefgarage an, wir wollen ja was sehen.
    Die beiden Warnlichter innen und außen blinken weiter, solange sich das Tor bewegt.
  4. Das Tor ist zum Stillstand gekommen, das Warnlicht geht aus aber das Innenlicht bleibt an.
    Gleichzeitig springt die äußere Ampel auf grün und die innere auf rot.
    Das von außen kommende Fahrzeug darf einfahren.
  5. Sobald der Ein- und Ausfahrtsbereich wieder frei ist, gehen beide Ampeln aus.
    Stattdessen fangen beide Warnlichter wieder an zu blinken.
  6. Drei Sekunden später beginnt das Rolltor sich zu schließen.
    Auf halber Höhe erlischt das Licht in der Tiefgarage. Wir müssen Strom sparen.
  7. Für die umgekehrte Richtung, also Fahrzeug will die Tiefgarage verlassen, müssen die Ampeln entgegengesetzt leuchten.

Und genau hier haben wir die oben beschriebene Anforderung. Das Warnlicht blinkt bereits vor dem Öffnen des Tors und erlischt, wenn das Tor zum Stillstand gekommen ist. Das Innenlicht leuchtet bereits, wenn sich das Tor zu bewegen beginnt und leuchtet auch während der Einfahrt. Dafür benötigt man einen Wert, der sowohl für die Warnlichter „wahr“ sein kann als auch für das Innenlicht, zu anderen Zeitpunkten aber „nicht wahr“ ist. Ich hoffe, das ist bis hierhin verständlich.

Die folgende Tabelle hilft uns jetzt dabei, die passenden Binärzahlen sowie die dazugehörigen Dezimalzahlen zu bestimmen.
Doch zunächst bekommt jede Funktion eine Binärstelle zugewiesen, und zwar einfach der Reihe nach von rechts nach links:
Bit 0 (Binär 1): Warnlicht
Bit 1 (Binär 2): Innenlicht
Bit 2 (Binär 4): Ampel reinfahren
Bit 3 (Binär 8): Ampel rausfahren

Im oberen Teil der folgenden Tabelle betrachten wir nur die Schaltzustände der Einzelfunktionen.
Im unteren Teil kombinieren wir die Schaltzustände, die gleichzeitig erreicht werden sollen.
Das geht ganz einfach, indem wir überall dort, wo eine Funktion aktiv sein soll, eine „1“ setzen und für inaktiv eine „0“.
In der letzten Spalte (▼) steht die resultierende Dezimalzahl, die sich als einfache Summe der Dezimalzahlen in Zeile 2 (◄) bilden lässt.
Auf diesen Punkt will ich nochmal näher eingehen, denn das ist wichtig:
Bit 0 heißt 2⁰ und ergibt 1 als Dezimalzahl
Bit 1 heißt 2¹ und ergibt 2 als Dezimalzahl
Wenn beide Bits aktiv sein sollen, werden einfach die beiden Dezimalzahlen addiert (also 1 + 2 = 3).

Nr. Funktion Bit 3 (2³) Bit 2 (2²) Bit 1 (2¹) Bit 0 (2⁰) BIN
8 4 2 1 ◄ Dezimalzahlen ▼
Alles ausgeschaltet 0 0 0 0 0000 0
1 Warnlicht aktiv (Bit 0) 0 0 0 1 0001 1
2 Innenlicht aktiv (Bit 1) 0 0 1 0 0010 2
3 Ampel einfahren aktiv (Bit 2) 0 1 0 0 0100 4
4 Ampel ausfahren aktiv (Bit 3) 1 0 0 0 1000 8
Funktionen kombiniert
5 Warnlicht & Innenlicht aktiv (Bit 0 & 1) 0 0 1 1 0011 3
6 Innenlicht & Ampel einfahren aktiv (Bit 1 & 2) 0 1 1 0 0110 6
7 Innenlicht & Ampel ausfahren aktiv (Bit 1 & 3) 1 0 1 0 1010 10

Für unsere Choreografie benötigen wir die Funktionen mit den Zeilennummern 1, 5, 6 und 7, also die Dezimalzahlen 1, 3, 6 und 10.
Wer es bis hierhin geschafft und verstanden hat, der hat den schwierigsten Teil hinter sich und ich finde, dass es gar nicht so schwer ist.

Wer das Ermitteln der Dezimalzahlen lieber dem Taschenrechner überlässt, für den hab ich gute Nachrichten.
Unter Windows wird dazu einfach die Rechner-App von Standard auf Programmierer umgestellt. Das geht über das Menü (1) und dort den Modus Programmierer (2) wählen.
Im Programmierer-Modus schaltet man auf BIN um (roter Rahmen), sodass nur noch die Tasten 0 und 1 aktiv sind (grüner Rahmen).
Tippt man jetzt die gewünschten aktiven Bits ein (z. B. 1010 für zweites und viertes Bit aktiv), dann spuckt der Taschenrechner als Dezimalzahl die passende 10 aus (blauer Rahmen).

Und auch die Mac-User unter uns können das auf diese Weise ermitteln. Dazu wird ähnlich wie bei Windows der Taschenrechner auf den Modus Programmierer umgestellt.
Im Modus Programmierer wird auf Dezimalzahlen umgestellt (grüner Rahmen).
Statt wie in Windows die Werte über die Tastatur einzugeben, können die aktiven Bits unter macOS durch einfaches Anklicken der Zahlen im Binärfeld (roter Rahmen) von 0 auf 1 umgestellt werden.

Die oben ermittelten Dezimalzahlen (1, 3, 6 und 10) werden nun den einzelnen Sequenzen im Pattern Configurator zugewiesen.
Dazu nutzen wir einfach wie oben erklärt die blaue Kontroll-LED auf der Stepper-Platine.
Sie ist später sowieso nicht zu sehen und übernimmt eine andere Aufgabe. Statt den Zustand des Steppermotors anzuzeigen ist sie zukünftig für die Steuerung der Lichtsequenzen verantwortlich.

Der letzte Schritt ist wie bei den einfacheren Operatoren die Abfrage der Werte im Programm Generator.
Der einzige Unterschied zu oben ist, dass ich jetzt nicht mehr den realen LED Helligkeitswert vergleiche (also 1, 3, 6 oder 10), sondern das Bit vergleiche.
Mit anderen Worten:
Die LED-to-Var-Funktion fragt beispielsweise ab, ob an Kanal 5 (blauer Kanal des zweiten WS2811) das Bit 0 aktiv ist.
Sobald die LED einen Helligkeitswert von 1 oder 3 erreicht, ist das Ergebnis: Ja, Bit 0 ist gerade aktiv.
Wird der Helligkeitswert 6 oder 10 erreicht, so lautet die Antwort: Nein, ist gerade nicht aktiv.
Ein weiteres Beispiel:
Die LED-to-Var-Funktion fragt beispielsweise ab, ob an Kanal 5 (blauer Kanal des zweiten WS2811) das Bit 2 aktiv ist.
Sobald die LED einen Helligkeitswert von 6 erreicht, ist das Ergebnis: Ja, Bit 2 ist gerade aktiv.
Wird der Helligkeitswert 1, 3 oder 10 erreicht, so lautet die Antwort: Nein, ist gerade nicht aktiv.

Daher wird es jetzt auch besonders einfach, die richtigen Werte abzufragen.
Die MobaLedLib fragt die einzelnen Stellen mit Dezimalzahlen ab, da wir keine Potenzen eingeben können (z. B. 2¹).
Für Bit 0 setzen wir als Vergleichswert daher die 1 (2⁰ = 1).
Für Bit 1 setzen wir als Vergleichswert daher die 2 (2¹ = 2).
Für Bit 2 setzen wir als Vergleichswert daher die 4 (2² = 4).
Für Bit 3 setzen wir als Vergleichswert daher die 8 (2³ = 8).

Vergleichswert

Wer es bis hierher geschafft hat, darf aufatmen. Denn das war's im Großen und Ganzen.
Der Vergleichswert ist einfach gesagt der Helligkeitswert (0 bis 255) der LED, die durch die Funktion abgefragt werden soll.
Eigentlich bedarf das gar keiner Erklärung mehr, denn es wurde in allen oben genannten Punkten immer ein wenig erklärt.

Fazit

Die LED-to-VAR-Funktion ist sicher ein Bereich, den man vor der Anwendung immer mal wieder nachschlagen muss. Doch richtig eingesetzt ist es wie eingangs erwähnt eine Waffe. Ich wünsch euch viel Freude und schöne Aha-Effekte, wenn ihr anfangt, Teile dieses Tutorials nachzubauen.

Outtakes

Die nachstehende Tabelle wollte ich ursprünglich zur Erklärung der Dezimalzahlen nutzen. Doch dann fiel mir auf, dass man ja einfach die Dezimalzahlen der aktiven Bits addieren muss oder man den Taschenrechner auf BIN umschalten kann. Daher ist das folgende Monster überflüssig. Für die Hardcore Fans habe ich es aber drin gelassen.

Dezimalzahl ermitteln

Binär
Dezimal ▼ 32 16 8 4 2 1
0 0 0 0 0 0 0
1 0 0 0 0 0 1
2 0 0 0 0 1 0
3 0 0 0 0 1 1
4 0 0 0 1 0 0
5 0 0 0 1 0 1
6 0 0 0 1 1 0
7 0 0 0 1 1 1
8 0 0 1 0 0 0
9 0 0 1 0 0 1
10 0 0 1 0 1 0
11 0 0 1 0 1 1
12 0 0 1 1 0 0
13 0 0 1 1 0 1
14 0 0 1 1 1 0
15 0 0 1 1 1 1
16 0 1 0 0 0 0
17 0 1 0 0 0 1
18 0 1 0 0 1 0
19 0 1 0 0 1 1
20 0 1 0 1 0 0
21 0 1 0 1 0 1
22 0 1 0 1 1 0
23 0 1 0 1 1 1
24 0 1 1 0 0 0
25 0 1 1 0 0 1
26 0 1 1 0 1 0
27 0 1 1 0 1 1
28 0 1 1 1 0 0
29 0 1 1 1 0 1
30 0 1 1 1 1 0
31 0 1 1 1 1 1
32 1 0 0 0 0 0
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
anleitungen/prog_gen/led-to-var.txt · Zuletzt geändert: von jueff