Arduino DMX Addresierung per DIP Schalter

We proudly present: The release of DMXControl 3.3.3!


On September 29, 2026, we held our release show for DMXControl 3.3.3. During our usual “hour-long” session, we showed you all the new features in this version and what it now has to offer.
Read all about it in the corresponding news article: We proudly present: The release of DMXControl 3.3.3!


  • Hallo Miteinander ich bin seit mehreren Tagen dabei eine DMX Adressierung für den guten Arduino zu basten mein Problem ist nur dass meine werte bzw wenn alle Schalter unten sind ich den wert 1 bekomme und schon probiert habe mit if schleifen eins abzuziehen was auch keine wirkliche Lösung ist ich bitte um Hilfe ich bin aber gerne am rumprobieren also erstmal nur ein par Tipps für die Lösung

    LG Julian

  • Hy. Du hast den Pullup für den Input 1 nicht aktiviert. Absicht (warum?) oder vergessen. Vermutlich vergessen, denn das würde erklären warum du bei allen 0 eine 1 bekommst.

    Der Code ist etwas unübersichtlich, ich würde das so machen:

    Code
     int addr = 0;
    if(!digitalRead(1)) addr += 1;
    if(!digitalRead(12)) addr += 2;
    if(!digitalRead(8)) addr += 4;
    if(!digitalRead(7)) addr += 8;
    ....

    Es ist auch unschön das Ergebnis eines digitalRead, welches HIGH oder LOW ist, mit einer Zahl zu multiplizieren.

    Das Leben ist NP vollständig!

  • ja der 1 war Absicht mit pull up auch wenn ich deine lösung mache dann habe ich wenn alle Dips auf off sind die zahl eins aber ich probiere morgen erst mal noch rum und dann schreib ich wieder auch wenn Eigenlob stinkt aber ich finde es wird so langsam besser bei mir mit dem Programmieren habe nochmal die Basics angeschaut und ich habe nicht ganz verstanden was du damit gemeint hast es gibt keine is schleife du meinst im Programm ist es was ich gemacht habe schwachsinn das kann ich nachvollziehen das habe ich auch gemerkt

  • Also, noch ein paar Punkte:

    IF Schleife ist einfach ein Unwort in der Programmierung. Daher reagieren die meisten SW Entwickler darauf allergisch. Außerdem im Sinne der Höflichkeit und Lesbarkeit verwende doch in Zukunft bei deinen Posts Satzzeichen. Deine Sätze sind echt schwer zu lesen. Letztendlich, du möchtest etwas von uns, nämlich Hilfe, da kannst du wenigstens dir die Zeit nehmen und deine Probleme sauber Aufschreiben.

    Ansonsten, wenn du trotzdem eine 1 Hast, dann ist es eventuell ein HW Problem, dass an dem "digitalRead(1)" immer ein HIGH ankommt, auch wenn der Schalter an ist. Am besten mal mit dem Debugger das Programm durcharbeiten und schauen was da ankommt.

    Das Leben ist NP vollständig!

  • @Soon ich habe gemeint von meinem Programm Code am anfange das es immer wenn der Dip schalter1 auf off ist bekomme ich Stadt den wert 0 immer 1

    auf dem Serial Monitor bekomme und eine Problem Lösung ist z.b das meines Wissens nach

    for(int i = 1; i <=12; i++){

        pinMode(i,INPUT);

        digitalWrite(i, HIGH);

    aber wie schaffe ich es die 3 PWM Pins 11, 10 , 9 im oben genannten Programm Code zu überspringen

    LG Julian

    Hy. Du hast den Pullup für den Input 1 nicht aktiviert. Absicht (warum?) oder vergessen. Vermutlich vergessen, denn das würde erklären warum du bei allen 0 eine 1 bekommst.

    Der Code ist etwas unübersichtlich, ich würde das so machen:

    Code
     int addr = 0;
    if(!digitalRead(1)) addr += 1;
    if(!digitalRead(12)) addr += 2;
    if(!digitalRead(8)) addr += 4;
    if(!digitalRead(7)) addr += 8;
    ....

    Es ist auch unschön das Ergebnis eines digitalRead, welches HIGH oder LOW ist, mit einer Zahl zu multiplizieren.

  • Also, wiedermal die Frage ohne Punkt und Komma. Ist echt nervig, und das letzte mal das ich Antworte. Wenn du dir nicht die Zeit nimmst deine Fragen sauber zu stellen, brauche ich mir auch keine Zeit für die Antworten nehmen.

    Auf die Frage, wie kannst du in der Schleife die 11, 10, 9 überspringen. Zwei Möglichkeiten. Entweder nur von 1 - 8 iterieren und die 12 separat handhaben, oder eben so:

    Code
    for(int i = 1; i <=12; i++)
    {    
        if(i < 9 || i > 11)
        {
            pinMode(i,INPUT);
    
            digitalWrite(i, HIGH);
        }
    }

    Unabhängig davon solltest du dich nochmal einlesen, was es mit Pullup Widerständen auf sich hat und wie das Funktioniert. Normalerweise setzt man an den Eingängen die PULL_UP und schaltet mit dem DIP Schalter den Eingang gegen GND. Die Pullup Widerstände verhindern ein Flatter am Eingang. Daher ist es normal, dass bei gesetztem Pullup Widerstand und Schalter = off eine 1 angezeigt wird. Daher wird ja auch im Code auf ! digitalRead geprüft.

    Das Leben ist NP vollständig!

  • @Soon , ich will nur das du bescheid weißt warum meine Komma Setzung so schlecht ist und meine Allgemeine Rechtschreibung ich habe eine anerkannte Lese Rechtschreib schwäche das heißt auf gut deutsch das ich mich mit der Komma Setzung usw. sehr Schwer tuhe ich bemühe mich aber es zu vermeiden, es ist aber echt schwierig für mich ich bitte um Verständnis ein wenig , ich bemühe mich echt sehr und hoffe das du kannst mich verstehen kannst

    LG Julian

  • Soon5 , Ich habs , das Problem Wahr das ich den PIN1 benutz habe und dieser ja auch der TX Pin ist, und dieser kann anscheinend den Wert 1 und 0 nicht Erkennen weil ich meinen PC mit dem Arduino verbunden habe. Deshalb benutze ich jetzt trotzdem pin 13 bis 2 und lasse 11, 10, 9 aus.

    Das war jetzt meine Rester richtiger Erfolg 8o ich hoffe für dich ist diese Nachrichten so okay habe alles versucht.

    LG Julian

  • @Soon, hast du vlt eine Idee , warum wenn ich einen Arduino UNO her nehme meinen sketch aufspiele er dann funktioniert und dann auf dem nano nicht ,es is ja ein und der selbe chip. Das Problem ist auf jeden fall pin 13 beim nano und pin 1 beim uno das er immer 1 oder den jeweiligen Dip wert dauerhaft auf on hat auch wenn der dip an der Eingabe auf off ist. Ich hoffe du kapierst was ich meine, ich habe es so ausführlich wie möglich probiert. Ich denke das ein Hardware Problem ist mit uno und nano oder die Pins ein wenig anders sind .

    Hoffe du kannst mir helfen wäre echt nice ;)

    LG Julian

  • Kannst du die Dip Switches nicht auch gleich als byte einlesen?

    Bzw. mit den bit überspringen könntest du dir auch eine Maske für die Bits und eine sperate funktion basteln, das wäre meiner meinung nach eine schöne lösung.

    Multiplikation wird eigentlich wenn möglich bei controller vermieden, wenn es sich um kleine controller handelt vorallem.

  • Multiplikation wird eigentlich wenn möglich bei controller vermieden, wenn es sich um kleine controller handelt vorallem.

    Deswegen hatte ich in meiner Lösung das auch mit Addition gemacht. Ich hab mir überlegt, das ist für einen Anfänger besser verständlich als es mit Bitverschiebung und Maskierung zu machen.

    Als Byte einlesen setzt halt voraus, dass es auf der Hardware entsprechend verdrahtet ist, und die ganzen Digital IOs auf dem gleichen Port liegen, was zumindest für das 9, Bit schwierig wird :D

    Das Leben ist NP vollständig!

  • Multiplikation wird eigentlich wenn möglich bei controller vermieden, wenn es sich um kleine controller handelt vorallem.

    Da hier aber nur mit den entsprechenden konstanten Zweierpotenzen multipliziert wird, gehe ich stark davon aus, dass der Compiler das beim Optimieren eh durch einen Links-Shift ersetzt. Von daher dürfte die Multiplikation hier kein Problem sein.

    Stefan

  • Multiplikation wird eigentlich wenn möglich bei controller vermieden, wenn es sich um kleine controller handelt vorallem.

    Da hier aber nur mit den entsprechenden konstanten Zweierpotenzen multipliziert wird, gehe ich stark davon aus, dass der Compiler das beim Optimieren eh durch einen Links-Shift ersetzt. Von daher dürfte die Multiplikation hier kein Problem sein.

    Stefan

    Ja stimmt da hast du wahrscheinlich recht! 👌🏻

    Allerdings finde ich sollte man wenn man in so ein Thema einsteigt auch gleich ein Gefühl dafür bekommen.

  • Stefan June 27, 2020 at 6:21 PM

    Changed the title of the thread from “Arduino DMX Addresirung per DIP Schalter” to “Arduino DMX Addresierung per DIP Schalter”.
  • Moin!
    ich hab heir gerade mal ein wenig mitgelesen.
    Falls noch interesse besteht, wir haben auch mal einen DMX Input für Arduino gebaut:
    Zu dem Video gibts auch den Arduino Code in der Bescheibung :)

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

  • Falkzetzu

    Moin, ich habe folgendes Problem:

    Mein Fixture verbraucht 241 Adressen, im "normalen" Receiver Mode der DMX Library, sind die update Intervalle zu langsam für alle 60 Pixel. Also Nutze ich den probe Mode, in welchem aber Anfangs Start Adresse, sowie DMXLength definiert wird.

    Mein Problem, ich will mittels eines DIPs die Start Adresse auswählen, lasse ich ihn aber von Anfang an das ganze Universum abhören, ist die update Geschwindigkeit auch wieder zu lahm.

  • Newly created posts will remain inaccessible for others until approved by a moderator. The last reply was more than 365 days ago, this thread is most likely obsolete. It is recommended to create a new thread instead.