From a8c2813b747575c1a55b7c9da169b9115eed33dc Mon Sep 17 00:00:00 2001 From: adb Date: Thu, 24 Dec 2020 14:11:04 +0100 Subject: [PATCH] add arduino files --- arduino/Artnet_to_DMX/Artnet_to_DMX.ino | 62 ++++++++++ .../Artnet_to_DMX_644pa.ino | 62 ++++++++++ .../Artnet_to_DMX_and_NRF24.ino | 100 ++++++++++++++++ .../Artnet_to_DMX_and_NRF24_644pa.ino | 109 ++++++++++++++++++ .../Artnet_to_DMX_and_Neopixel.ino | 85 ++++++++++++++ arduino/NRF24_to_DMX/NRF24_to_DMX.ino | 88 ++++++++++++++ arduino/NRF24_to_Neopixel/NRF_to_Neopixel.ino | 64 ++++++++++ 7 files changed, 570 insertions(+) create mode 100644 arduino/Artnet_to_DMX/Artnet_to_DMX.ino create mode 100644 arduino/Artnet_to_DMX_644pa/Artnet_to_DMX_644pa.ino create mode 100644 arduino/Artnet_to_DMX_and_NRF24/Artnet_to_DMX_and_NRF24.ino create mode 100644 arduino/Artnet_to_DMX_and_NRF24_644pa/Artnet_to_DMX_and_NRF24_644pa.ino create mode 100644 arduino/Artnet_to_DMX_and_Neopixel/Artnet_to_DMX_and_Neopixel.ino create mode 100644 arduino/NRF24_to_DMX/NRF24_to_DMX.ino create mode 100644 arduino/NRF24_to_Neopixel/NRF_to_Neopixel.ino diff --git a/arduino/Artnet_to_DMX/Artnet_to_DMX.ino b/arduino/Artnet_to_DMX/Artnet_to_DMX.ino new file mode 100644 index 0000000..7486d43 --- /dev/null +++ b/arduino/Artnet_to_DMX/Artnet_to_DMX.ino @@ -0,0 +1,62 @@ +//DMX stuff +#include +#include +const int universeSize = 512; + +//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(12, 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); + + pinMode(12, OUTPUT); + + //start DMX + DMX.begin(universeSize); + + //start ethernet + Ethernet.begin(mac, ip); + + //start ArtNet + artnet.begin(); + artnet.subscribe(universe0, callback); +} + +void loop() { + //analogWrite(9, 85); + if (artnet.parse()){ // check if artnet packet has come and execute callback + digitalWrite(9, HIGH); + } + //analogWrite(9, 255); + + + DMX.beginTransmission(); + for (int i = 0; i <= 511; ++i) { + DMX.write(i, artnetdata[i]); + } + DMX.endTransmission(); + delay(20); + digitalWrite(9, LOW); +} diff --git a/arduino/Artnet_to_DMX_644pa/Artnet_to_DMX_644pa.ino b/arduino/Artnet_to_DMX_644pa/Artnet_to_DMX_644pa.ino new file mode 100644 index 0000000..2af1037 --- /dev/null +++ b/arduino/Artnet_to_DMX_644pa/Artnet_to_DMX_644pa.ino @@ -0,0 +1,62 @@ +//DMX stuff +#include +#include +const int universeSize = 512; + +//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(30, data[i]); + if (i == 1) analogWrite(8, data[i]); + if (i == 2) analogWrite(9, data[i]); + } +} + +void setup() { + pinMode(30, OUTPUT); + pinMode(8, OUTPUT); + pinMode(9, OUTPUT); + + pinMode(13, OUTPUT); + + //pinMode(7, OUTPUT); + + //start DMX + DMX.begin(universeSize); + + //start ethernet + Ethernet.begin(mac, ip); + + //start ArtNet + artnet.begin(); + artnet.subscribe(universe0, callback); +} + +void loop() { + //analogWrite(9, 85); + if (artnet.parse()) { // check if artnet packet has come and execute callback + digitalWrite(13, HIGH); + } + //analogWrite(9, 255); + + + DMX.beginTransmission(); + for (int i = 0; i <= 511; ++i) { + DMX.write(i, artnetdata[i]); + } + DMX.endTransmission(); + delay(20); + digitalWrite(13, LOW); +} diff --git a/arduino/Artnet_to_DMX_and_NRF24/Artnet_to_DMX_and_NRF24.ino b/arduino/Artnet_to_DMX_and_NRF24/Artnet_to_DMX_and_NRF24.ino new file mode 100644 index 0000000..28e2577 --- /dev/null +++ b/arduino/Artnet_to_DMX_and_NRF24/Artnet_to_DMX_and_NRF24.ino @@ -0,0 +1,100 @@ +//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(3, data[i]); + if (i == 1) analogWrite(5, data[i]); + if (i == 2) analogWrite(6, data[i]); + } +} + +//NRF stuff +#include +#include +#include + +RF24 radio (7, 8); + +const uint16_t address = 0xADB0; +uint64_t datasend; + +//setup +void setup() { + pinMode(3, OUTPUT); + pinMode(5, OUTPUT); + pinMode(6, OUTPUT); + + pinMode(9, 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_MIN); + radio.setDataRate(RF24_1MBPS); + //radio.disableDynamicPayloads(); + radio.setAutoAck(false); + radio.disableCRC(); + radio.stopListening(); +} + +void loop() { + int timebegin = millis(); + + //get ArtNet package + if (artnet.parse()) { // check if artnet packet has come and execute callback + digitalWrite(9, HIGH); + } + + //uint64_t nrfpackage = artnetdata[0]; + + + //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(9, LOW); +} diff --git a/arduino/Artnet_to_DMX_and_NRF24_644pa/Artnet_to_DMX_and_NRF24_644pa.ino b/arduino/Artnet_to_DMX_and_NRF24_644pa/Artnet_to_DMX_and_NRF24_644pa.ino new file mode 100644 index 0000000..6c8c4b1 --- /dev/null +++ b/arduino/Artnet_to_DMX_and_NRF24_644pa/Artnet_to_DMX_and_NRF24_644pa.ino @@ -0,0 +1,109 @@ +//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); +} diff --git a/arduino/Artnet_to_DMX_and_Neopixel/Artnet_to_DMX_and_Neopixel.ino b/arduino/Artnet_to_DMX_and_Neopixel/Artnet_to_DMX_and_Neopixel.ino new file mode 100644 index 0000000..635639e --- /dev/null +++ b/arduino/Artnet_to_DMX_and_Neopixel/Artnet_to_DMX_and_Neopixel.ino @@ -0,0 +1,85 @@ +//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); +} diff --git a/arduino/NRF24_to_DMX/NRF24_to_DMX.ino b/arduino/NRF24_to_DMX/NRF24_to_DMX.ino new file mode 100644 index 0000000..86d023b --- /dev/null +++ b/arduino/NRF24_to_DMX/NRF24_to_DMX.ino @@ -0,0 +1,88 @@ +//DMX stuff +#include +#include +const int universeSize = 512; +byte DMXdata[512]; + +//Neopixel stuff +#include +#ifdef __AVR__ +#include +#endif +#define NEOPIN 10 +#define NUMPIXELS 1 +#define NEOSTART 0 +Adafruit_NeoPixel pixels(NUMPIXELS, NEOPIN, NEO_GRB + NEO_KHZ800); + +//NRF stuff +#include +#include +#include + +RF24 radio (7, 8); + +const uint16_t address = 0xADB0; +uint64_t datareceive; + +void setup() { + //Serial.begin(115200); + + pinMode(3, OUTPUT); + pinMode(5, OUTPUT); + pinMode(6, OUTPUT); + + pinMode(9, OUTPUT); + + + //start NRF + radio.begin(); + radio.openReadingPipe(0, address); + radio.setPALevel(RF24_PA_MAX); + radio.setDataRate(RF24_1MBPS); + radio.setAutoAck(false); + radio.disableCRC(); + radio.startListening(); + + //start DMX + DMX.begin(universeSize); + + //Serial.println("setup finished"); + + //start Neopixels +#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000) + clock_prescale_set(clock_div_1); +#endif + + pixels.begin(); +} + +void loop() { + for (int i = 0; i < 20; i++) { //count packages + do { + while (!radio.available()); //wait for NRF + radio.read(&datareceive, sizeof(datareceive)); //get NRF data + } while (i != ((datareceive >> 8 * 7) & 0xFF)); //wait for right package ID + digitalWrite(9, HIGH); + for (int j = 0; j < 7; j++) { //count bytes + DMXdata[7 * i + j] = (datareceive >> 48 - 8 * j) & 0xFF; //bytes to array + //Serial.print(DMXdata[7 * i + j], HEX); //print data + //Serial.print(", "); + } + } + //Serial.println(""); + //DMX output + DMX.beginTransmission(); + for (int i = 0; i < 280; ++i) { + DMX.write(i, DMXdata[i]); + //if (i == 0) analogWrite(3, DMXdata[i]); + //if (i == 1) analogWrite(5, DMXdata[i]); + //if (i == 2) analogWrite(6, DMXdata[i]); + } + DMX.endTransmission(); + + pixels.clear(); + pixels.setPixelColor(0, pixels.Color(DMXdata[1], DMXdata[0], DMXdata[2])); + pixels.show(); + + digitalWrite(9, LOW); +} diff --git a/arduino/NRF24_to_Neopixel/NRF_to_Neopixel.ino b/arduino/NRF24_to_Neopixel/NRF_to_Neopixel.ino new file mode 100644 index 0000000..f94416e --- /dev/null +++ b/arduino/NRF24_to_Neopixel/NRF_to_Neopixel.ino @@ -0,0 +1,64 @@ +//NRF stuff +#include +#include +#include + +RF24 radio (7, 8); + +const uint16_t address = 0xADB0; +uint64_t datareceive; + +//Neopixel stuff +#include +#ifdef __AVR__ +#include +#endif +#define NEOPIN 6 +#define NUMPIXELS 48 +#define NEOSTART 0 +Adafruit_NeoPixel pixels(NUMPIXELS, NEOPIN, NEO_GRB + NEO_KHZ800); +byte neodata[512]; + +void setup() { + pinMode(9, OUTPUT); + + //start NRF + radio.begin(); + radio.openReadingPipe(0, address); + radio.setPALevel(RF24_PA_LOW); + radio.setDataRate(RF24_1MBPS); + radio.setAutoAck(false); + radio.disableCRC(); + radio.startListening(); + + //start Neopixels +#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000) + clock_prescale_set(clock_div_1); +#endif + pixels.begin(); + +} + +void loop() { + //NRF receive + for (int i = 0; i < 20; i++) { //count packages + do { + while (!radio.available()); //wait for NRF + radio.read(&datareceive, sizeof(datareceive)); //get NRF data + } while (i != ((datareceive >> 8 * 7) & 0xFF)); //wait for right package ID + digitalWrite(9, HIGH); + for (int j = 0; j < 7; j++) { //count bytes + neodata[7 * i + j] = (datareceive >> 48 - 8 * j) & 0xFF; //bytes to array + //Serial.print(DMXdata[7 * i + j], HEX); //print data + //Serial.print(", "); + } + } + + pixels.clear(); //clear Neopixels + for (int i = 0; i < 48; ++i) { + pixels.setPixelColor(i, pixels.Color(neodata[i * 3 + 0 + NEOSTART], neodata[i * 3 + 1 + NEOSTART], neodata[i * 3 + 2 + NEOSTART])); //write Neopixel data + } + pixels.show(); //send Neopixel data + + digitalWrite(9, LOW); +}