Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Simple Example

The following example illustrates the usage of the DMX shield:

Code Block
languagecpp
// DMX Writer

#include <DmxSimple.h>

void setup() {
  Serial.begin(115200);
  DmxSimple.usePin(11);
}

long long time = 0;

int step = 0;

void loop() {
  // wait 16ms (60/s) between animation steps
  if (time < millis() - 16) {
    // this is necessary to give the interrupt routine
    // enough time to write the dmx messages
    Serial.println("stepstepstepstep");
    
    // set time
    time = millis();

    // set rgb
    DmxSimple.write(1, step);
    DmxSimple.write(2, step);
    DmxSimple.write(3, step);

    // increment
    step += 1;

    // handle wrapping
    if (step > 255) {
      step = 0;
    }
  }
}

Arduino DMX Bridge

Um Daten von Processing an DMX (siehe Wikipedia) zu  zu übergeben nutzen wir ein Arduino als Brücke. Auf das Arduino setzen wir das DMX Shield und programmieren es mit dem folgenden Code:

Code Block
languagejavacpp
titleArduino DMX Bridge
collapsetrue
// DMX Bridge
//
// Write #includemessages <DmxSimple.h>in the #define NUM_OF_VALUES 2

String incomingString = "";
int incomingValues[NUM_OF_VALUES];form of "2:127\n" to forward
// them to the connect DMX device.

#include <DmxSimple.h>

void setup() {
  Serial.begin(9600);
  DmxSimple.usePin(11);
}

void loop() {
  if(Serial.available() > 0) {
     readSerialint channel = Serial.readStringUntil(':').toInt();
     setDMX(incomingValues);
}

void readSerial()
{
  if (Serial.available() > 0)
  {
    incomingString = Serial.readStringUntil('\n'int value = Serial.readStringUntil('\n').toInt();

    Serial.print("set ");
    Serial.print(channel);
    Serial.print(" to ");
    Serial.println(value);
  
 split(incomingString, incomingValues, NUM_OF_VALUES   DmxSimple.write(channel, value);
  }
}

Mit diesem Code werden alle Kommandos, welche über die Serielle Schnittstelle an das Arduino geschickt werden in DMX Nachrichten umgewandelt und über DMX verschickt. Dazu müssen wir auf der Seite von Processing folgendes Protokoll einhalten:

Code Block
CHANNEL:VALUE\n
  • CHANNEL entspricht einem Wert von 0 - 512.
  • VALUE entspricht einem Wert von 0 - 255.

Processing Beispiel

Das folgende Beispiel sender RGB Werte an eine DMX Leuchte:

Code Block
languagejava
titleProcessing Beispiel
collapsetrue
import processing.serial.*;
Serial port;
 
void split(String inputString, int returnData[], int numOfValues)
{
  int index = 0;
  int lastPos = 0;

  for (int i = 0; i < inputString.length(); i++)
  setup() {
  background(0);
  size(500, 500);
  frameRate(5);
  
  println(Serial.list());
  port = new Serial(this, "/dev/tty.usbmodem1411", 9600);
  
  sendDMX(1, 0);
  sendDMX(2, 0);
  sendDMX(1, 255);
}
 
void draw(){
  while(port.available() > 0) {
    if print(inputStringport.charAtreadString(i));
 == ','}
&& index <
numOfValues)  int red  {
   = int(map(mouseX, 0, width, 0, 255));
  Stringint tempStrgreen = inputString.substring(lastPos, i - 1int(map(mouseY, 0, height, 0, 255));
  
  background(red, green,  returnData[index] = tempStr.toInt(0);
  stroke(255);
  text("Red: " + red index++;
      lastPos = i + 1+ " - Green: " + green, 20, 20);
  
  sendDMX(1, red);
  sendDMX(2, green);
}   }sendDMX(3, 0);
}

void setDMXsendDMX(int channel, int values[]value) {
  print(str(channel));
  DmxSimple.write(values[0], values[1]print(":");
  print(str(value));
}  

Mit diesem Code werden alle Kommandos, welche über die serielle Schnittstelle (siehe Serielle Kommunikation) an das Arduino geschickt werden in DMX Nachrichten umgewandelt und über DMX verschickt. Dazu müssen wir auf der Seite von Processing folgendes Protokoll einhalten.

CHANNEL "," WERT "," CR

CHANNEL = Ein DMX Kanal (0...512)

WERT = Ein Wert (0...255)

Im Folgenden ein kleines Beispiel, welches einen RGB Wert an eine DMX Leuchte sendet

Code Block
languagejava
titleBeispiel RGB über DMX Senden
collapsetrue
 print('\n');
  
  port.write(str(channel));
  port.write(":");
  port.write(str(value));
  port.write('\n');
}

Einstellungen an den DMX Empfängern (Leuchten, Scanner usw.)

Um die gesendeten Werte mit einem DMX Endgerät lesen zu können muss dieses über die entsprechende Konfiguration verfügen. Es sollte demnach die richtige Adresse und der Wertebereich bekannt sein. Wegen der Vielzahl unterschiedlicher DMX Geräte sei hier auf die Bedienungsanleitung oder das Datenblatt des jeweiligen Gerätes verwiesen. Dort finden sich Hinweise, wie sich die Adresse einstellen lässt und wie viele Kanäle ein Gerät besitzt.