//DMX stuff #include #include const int universeSize = 512; //ArtNet stuff #include ArtnetReceiver artnet; uint32_t universe0 = 0; uint32_t universe1 = 1; byte 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(byte* data, uint16_t size) { for (size_t i = 0; i < 512; ++i) { artnetdata[i] = data[i]; //if (i == 0) analogWrite(30, data[i]); //if (i == 1) analogWrite(8, data[i]); //if (i == 2) analogWrite(9, data[i]); } } //NRF stuff #include #include #include RF24 radio (0, 1); const uint16_t address = 0xADB0; uint64_t datasend; //setup void setup() { pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(14, OUTPUT); pinMode(15, OUTPUT); //start DMX DMX.begin(universeSize); //start ethernet Ethernet.begin(mac, ip); //start ArtNet artnet.begin(); artnet.subscribe(universe0, callback); //start NRF radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_LOW); radio.setDataRate(RF24_1MBPS); //radio.disableDynamicPayloads(); radio.setAutoAck(false); radio.disableCRC(); radio.stopListening(); analogWrite(12, 20); delay(100); } void loop() { //int timebegin = millis(); //get ArtNet package while(!artnet.parse()); digitalWrite(15, HIGH); /*if (artnet.parse()) { // check if artnet packet has come and execute callback digitalWrite(31, HIGH); }*/ //uint64_t nrfpackage = artnetdata[0]; //RGB PWM analogWrite(12, artnetdata[0]); analogWrite(13, artnetdata[1]); analogWrite(14, artnetdata[2]); //DMX output DMX.beginTransmission(); for (int i = 0; i < 512; ++i) { DMX.write(i, artnetdata[i]); } DMX.endTransmission(); //send NRF for (int i = 0; i < 20; i++) { datasend = i; //package ID for (int j = 0; j < 7; j++) { datasend = (datasend << 8) + artnetdata[7 * i + j]; } radio.writeFast(&datasend, sizeof(datasend)); } //int timeend = millis(); //int timeneeded = timeend - timebegin; //if (timeneeded < 20) delay(20 - timeneeded); digitalWrite(15, LOW); }