Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

Processing DMX Bridge

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

// DMX Bridge
//
// Write messages in the form of "2:127\n" to forward
// the to the connect DMX device.

#include <DmxSimple.h>

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

void loop() {
  if(Serial.available() > 0) {
    int channel = Serial.readStringUntil(':').toInt();
    int value = Serial.readStringUntil('\n').toInt();

    Serial.print("set ");
    Serial.print(channel);
    Serial.print(" to ");
    Serial.println(value);
  
    DmxSimple.write(channel, 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

Beispiel RGB über DMX Senden
import processing.serial.*;  // Import the Processing Serial Library for communicating with arduino
Serial dmxPort;               // The used Serial Port

int[][] dmxValues; //First dimension = number of DMX channels //Second dimension = channel, value
int amountOfDMXChannels = 3;

void setup()
{
  background(0);
  size(500, 500);
  println(Serial.list()); // Prints the list of serial available devices (Arduino should be on top of the list)
  dmxPort = new Serial(this, Serial.list()[Serial.list().length-1], 9600); // Open a new port and connect with Arduino at 9600 baud

  dmxValues = new int[amountOfDMXChannels][2];
  dmxValues[0][0] = 0;
  dmxValues[1][0] = 1;
  dmxValues[2][0] = 2;
}

void draw()
{
  background(0);
  color c = color(map(mouseX,0,width,0,255),map(mouseY,0,height,0,255),0);
  text("R: "+red(c)+"\t G: "+green(c)+"\t B: "+blue(c), 20, 20);
  dmxValues[0][1] = int(red(c));
  dmxValues[1][1] = int(green(c));
  dmxValues[2][1] = int(blue(c));
  sendDMX(dmxValues);
}

void sendDMX(int valuesToSend[][])
{
  for (int i=0; i<valuesToSend.length; i++)
  {
    dmxPort.write(str(valuesToSend[i][0]));
    dmxPort.write(",");
    dmxPort.write(str(valuesToSend[i][1]));
    dmxPort.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.