Artnet Neopixel sketch umschreiben für DMX

Hi Leute, hab hier ein Sketch welches so weit 1A funktioniert, jetzt die frage, könnte man zufällig da ja im Artnet mehrere Universen ansteuerbar sind, diesem Sketch eine Zusatzfunktion Schreiben um zusätzlich DMX Signale zu versenden?

Gedacht ist das so, das Sketch sollte erweitert werden um 2 Artnet 2 Dmx Universen. Dazu hab ich mir gedacht, soll das Neopixel script auf Universum 2 Läuft, und dmx 1 und dmx2 auf Universum 0 und 1 zu setzen. Da ja mit dem arduino mega bis zu 4 universen verarbeitbar wäre sollte das ja im grunde kein problem sein oder? nur wie Sende ich die daten an DMX? ich benötige ja noch 2 ic´s zum versenden und codieren der daten. ein Möglicher anschluss der pins wäre wie hier auf dem Bild

/*
This example will receive multiple universes via Artnet and control a strip of ws2811 leds via 
Adafruit's NeoPixel library: https://github.com/adafruit/Adafruit_NeoPixel
This example may be copied under the terms of the MIT license, see the LICENSE file for details
*/

#include <Artnet.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <Adafruit_NeoPixel.h>

// Neopixel settings
const int numLeds = 165; // change for your setup
const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels)
const byte dataPin = 2;
Adafruit_NeoPixel leds = Adafruit_NeoPixel(numLeds, dataPin, NEO_GRB + NEO_KHZ800);

// Artnet settings
Artnet artnet;
const int startUniverse = 1; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0.

// Check if we got all universes
const int maxUniverses = numberOfChannels / 512 + ((numberOfChannels % 512) ? 1 : 0);
bool universesReceived[maxUniverses];
bool sendFrame = 1;
int previousDataLength = 0;

// Change ip and mac address for your setup
byte ip[] = {192, 168, 178, 46};
byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};

EthernetClient client;

void setup()
{
  Serial.begin(9600);
  // this check is only needed on the Leonardo:
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for (;;)
      ;
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
  Serial.println();
  
  //Serial.begin(115200);
  artnet.begin(mac, ip);
  leds.begin();
  initTest();

  // this will be called for each packet received
  artnet.setArtDmxCallback(onDmxFrame);
}

void loop()
{
  // we call the read function inside the loop
  artnet.read();
}

void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
{
  sendFrame = 1;
  // set brightness of the whole strip 
  if (universe == 15)
  {
    leds.setBrightness(data[0]);
    leds.show();
  }

  // Store which universe has got in
  if ((universe - startUniverse) < maxUniverses)
    universesReceived[universe - startUniverse] = 1;

  for (int i = 0 ; i < maxUniverses ; i++)
  {
    if (universesReceived[i] == 0)
    {
      //Serial.println("Broke");
      sendFrame = 0;
      break;
    }
  }

  // read universe and put into the right part of the display buffer
  for (int i = 0; i < length / 3; i++)
  {
    int led = i + (universe - startUniverse) * (previousDataLength / 3);
    if (led < numLeds)
      leds.setPixelColor(led, data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
  }
  previousDataLength = length;     
  
  if (sendFrame)
  {
    leds.show();
    // Reset universeReceived to 0
    memset(universesReceived, 0, maxUniverses);
  }
}

void initTest()
{
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 127, 0, 0);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 127, 0);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 0, 127);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 0, 0);
  leds.show();
}

So guten Morgen zusammen.
Ich hab heute morgen etwas mit SimpleDMX und Artnet gebastelt. nur leider hab ich bislang noch kein Signal am DMX Ausgang. Woran könnte das liegen? die DMX Werte werden aber schon Richtig ausgelesen und als Kontrolle via usb am rechner gesendet. doch das DMX Gerät selbst bleibt dunkel.

#include <Artnet.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <Adafruit_NeoPixel.h>
#include <DmxSimple.h>

const byte Dmx1Pin = 0;

Artnet artnet;

const int startUniverse = 2; //Artnet Universum
const int maxUniverses = 90;
bool universesReceived[maxUniverses];
bool sendFrame = 1;
int previousDataLength = 0;


byte ip[] = {192, 168, 178, 46};
byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};
EthernetClient client;

void dmxWriteCallback(byte pin, int value)
{

  DmxSimple.write(pin, value);
  Serial.print(" ");
      Serial.print("CH: ");
      Serial.print(pin);
      Serial.print(" = ");
      Serial.print(value);
      Serial.print(" ");
      Serial.println();
}





void setup() {
  DmxSimple.usePin(Dmx1Pin);
  DmxSimple.maxChannel(1);
  
  //___________ip und Ethernet check_____________
  Serial.begin(115200);
  while (!Serial) {
    ; 
  }
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Fehler beim configurieren des Ethernet mit DHCP");
    for (;;)
      ;
  }
  Serial.print("Meine IP Adresse: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
  Serial.println();
  //___________ip und Ethernet check ende__________


  //___________Artnet Starten______________________
  artnet.begin(mac, ip);
  artnet.setArtDmxCallback(onDmxFrame);
}
  //___________loop_________________________________
void loop() {
  artnet.read();

}
  //___________Datenstring auswerten________________
void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
{
  sendFrame = 1;
  
   if ((universe - startUniverse) < maxUniverses)
    universesReceived[universe - startUniverse] = 1;

  for (int i = 0 ; i < maxUniverses ; i++)
  {
    if (universesReceived[i] == 0)
    {
      Serial.println("Broke");
      sendFrame = 0;
      break;
    }
  }
//Serial.println(length);
//Serial.println("");
if (universe == startUniverse)
{
  for (int i = 0; i < length ; i++)
  {
      int dmx1 = i + (universe - startUniverse) * (previousDataLength )+1;
      if (dmx1 < maxUniverses)
      dmxWriteCallback(dmx1, data[i]);
      //DmxSimple.write(dmx1, data[i]);
      
      
  }
  previousDataLength = length;
}
  if (sendFrame)
  {
   memset(universesReceived, 0, maxUniverses);
  }
}

am shield kann es schlecht liegen da ich es so wie hier Arduino Playground - HomePage angeschlossen habe.
ein auszug aus dem Print:

CH: 1 = 255 
CH: 2 = 195 
CH: 3 = 205 
CH: 4 = 222 
CH: 5 = 0 
CH: 6 = 0 
CH: 7 = 0 
CH: 8 = 0 
CH: 9 = 0 
CH: 10 = 0 
CH: 11 = 0 
CH: 12 = 0 
CH: 13 = 0 
CH: 14 = 0 
CH: 15 = 0 
CH: 16 = 0 
CH: 17 = 0 
CH: 18 = 0 
CH: 19 = 0 
CH: 20 = 0 
CH: 21 = 0 
CH: 22 = 0 
CH: 23 = 0 
CH: 24 = 0 
CH: 25 = 127 
CH: 26 = 127 
CH: 27 = 127 
CH: 28 = 127 
CH: 29 = 0 
CH: 30 = 0 
CH: 31 = 0 
CH: 32 = 0 
CH: 33 = 0 
CH: 34 = 0 
CH: 35 = 0 
CH: 36 = 0 
CH: 37 = 0 
CH: 38 = 127 
CH: 39 = 127 
CH: 40 = 127 
CH: 41 = 127 
CH: 42 = 0 
CH: 43 = 0 
CH: 44 = 0 
CH: 45 = 0 
CH: 46 = 0 
CH: 47 = 0 
CH: 48 = 0 
CH: 49 = 0 
CH: 50 = 0 
CH: 51 = 127 
CH: 52 = 127 
CH: 53 = 0 
CH: 54 = 0 
CH: 55 = 0 
CH: 56 = 0 
CH: 57 = 255 
CH: 58 = 0 
CH: 59 = 0 
CH: 60 = 127 
CH: 61 = 127 
CH: 62 = 0 
CH: 63 = 0 
CH: 64 = 0 
CH: 65 = 0 
CH: 66 = 255 
CH: 67 = 0 
....