Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- This example will receive multiple universes via Art-Net and control a strip of
- WS2812 LEDs via the FastLED library: https://github.com/FastLED/FastLED
- This example may be copied under the terms of the MIT license, see the LICENSE file for details
- */
- #if defined(ARDUINO_ARCH_ESP32)
- #include <WiFi.h>
- #else
- #include <ESP8266WiFi.h>
- #endif
- #include <WiFiUdp.h>
- #include <ArtnetWifi.h>
- #include <FastLED.h>
- // Wifi settings
- const char* ssid = "ZyXEL NBG-418N v2";
- const char* password = "JNSQU39336";
- // LED settings
- const int numLeds = 120; // CHANGE FOR YOUR SETUP
- const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels)
- const byte dataPin = 7;
- CRGB leds[numLeds];
- // Art-Net settings
- ArtnetWifi artnet;
- const int startUniverse = 0; // 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;
- // connect to wifi – returns true if successful or false if not
- boolean ConnectWifi(void)
- {
- boolean state = true;
- int i = 0;
- WiFi.begin(ssid, password);
- Serial.println("");
- Serial.println("Connecting to WiFi");
- // Wait for connection
- Serial.print("Connecting");
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- if (i > 20){
- state = false;
- break;
- }
- i++;
- }
- if (state){
- Serial.println("");
- Serial.print("Connected to ");
- Serial.println(ssid);
- Serial.print("IP address: ");
- Serial.println(WiFi.localIP());
- } else {
- Serial.println("");
- Serial.println("Connection failed.");
- }
- return state;
- }
- void initTest()
- {
- for (int i = 0 ; i < numLeds ; i++) {
- leds[i] = CRGB(127, 0, 0);
- }
- FastLED.show();
- delay(500);
- for (int i = 0 ; i < numLeds ; i++) {
- leds[i] = CRGB(0, 127, 0);
- }
- FastLED.show();
- delay(500);
- for (int i = 0 ; i < numLeds ; i++) {
- leds[i] = CRGB(0, 0, 127);
- }
- FastLED.show();
- delay(500);
- for (int i = 0 ; i < numLeds ; i++) {
- leds[i] = CRGB(0, 0, 0);
- }
- FastLED.show();
- }
- 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)
- {
- FastLED.setBrightness(data[0]);
- FastLED.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[led] = CRGB(data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
- }
- previousDataLength = length;
- if (sendFrame)
- {
- FastLED.show();
- // Reset universeReceived to 0
- memset(universesReceived, 0, maxUniverses);
- }
- }
- void setup()
- {
- Serial.begin(115200);
- ConnectWifi();
- artnet.begin();
- FastLED.addLeds<WS2812, dataPin, GRB>(leds, numLeds);
- initTest();
- // this will be called for each packet received
- artnet.setArtDmxCallback(onDmxFrame);
- }
- void loop()
- {
- // we call the read function inside the loop
- artnet.read();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement