//DMX stuff #include #include const int universeSize = 512; //Neopixel stuff #include #ifdef __AVR__ #include #endif #define NEOPIN 11 #define NUMPIXELS 50 #define NEOSTART 0 Adafruit_NeoPixel pixels(NUMPIXELS, NEOPIN, NEO_GRB + NEO_KHZ800); //ArtNet stuff #include ArtnetReceiver artnet; uint32_t universe0 = 0; uint32_t universe1 = 1; int artnetdata[512]; // ethernet stuff const IPAddress ip(10, 255, 255, 255); uint8_t mac[] = {0xAA, 0xDD, 0xBB, 0xAA, 0xDD, 0xBB}; //ArtNet universe0 callback void callback(uint8_t* data, uint16_t size) { for (size_t i = 0; i <= 511; ++i) { artnetdata[i] = data[i]; if (i == 0) analogWrite(3, data[i]); if (i == 1) analogWrite(5, data[i]); if (i == 2) analogWrite(6, data[i]); } } void setup() { pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(9, OUTPUT); //start DMX DMX.begin(universeSize); //start Neopixels #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif pixels.begin(); //start ethernet Ethernet.begin(mac, ip); //start ArtNet artnet.begin(); artnet.subscribe(universe0, callback); //pinMode(10, OUTPUT); } void loop() { if (artnet.parse()) { // check if artnet packet has come and execute callback digitalWrite(9, HIGH); } DMX.beginTransmission(); //beginn DMX for (int i = 0; i <= 511; ++i) { DMX.write(i, artnetdata[i]); //write DMX data } DMX.endTransmission(); pixels.clear(); //clear Neopixels for (int i = 0; i < 48; ++i) { pixels.setPixelColor(i, pixels.Color(artnetdata[i * 3 + 0 + NEOSTART], artnetdata[i * 3 + 1 + NEOSTART], artnetdata[i * 3 + 2 + NEOSTART])); //write Neopixel data } pixels.show(); //send Neopixel data delay(20); digitalWrite(9, LOW); }