You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.8 KiB
C++
86 lines
1.8 KiB
C++
//DMX stuff
|
|
#include <ArduinoRS485.h>
|
|
#include <ArduinoDMX.h>
|
|
const int universeSize = 512;
|
|
|
|
//Neopixel stuff
|
|
#include <Adafruit_NeoPixel.h>
|
|
#ifdef __AVR__
|
|
#include <avr/power.h>
|
|
#endif
|
|
#define NEOPIN 11
|
|
#define NUMPIXELS 50
|
|
#define NEOSTART 0
|
|
Adafruit_NeoPixel pixels(NUMPIXELS, NEOPIN, NEO_GRB + NEO_KHZ800);
|
|
|
|
//ArtNet stuff
|
|
#include <Artnet.h>
|
|
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);
|
|
}
|