Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 5 of 5

Thread: adalight WS2812B Different Lengths Strips

  1. #1
    Junior Member
    Join Date
    Feb 2017
    Posts
    3

    adalight WS2812B Different Lengths Strips

    I've ran into a problem and could use help please.

    I'm running about 480 LEDS in my setup with a teensy 3.1 and octosw2811. I have 6 strips with different amount of leds . How do I define the amount of leds per strip. For example

    Strip #1 num of leds is 61,
    Strip #2 num of leds is 86,
    Strip num 3 is 94,
    Strip #4 num of leds is 86,
    Strip #5 num of leds is 61,
    Strip #6 num of leds is 94.

    I didn't realize that the strips need to be parallel. I thought I could just set the # of leds vertically and horizontally like I did in Ambibox.

  2. #2
    Member
    Join Date
    Oct 2016
    Location
    Colchester, Essex, UK
    Posts
    55
    Use an array. E.g.

    const int num_leds[] = {
    61,
    86,
    94,
    86,
    61,
    94

    /* if you want to add another strip, just put its number of LEDS here */

    };

  3. #3
    Junior Member
    Join Date
    Feb 2017
    Posts
    3
    Sorry I'm very new at this can you show me how to insert this? Here is the Adalight code.

    /* OctoWS2811 Adalight.ino - Receive Adalight and display on WS2811 LEDs
    http://www.pjrc.com/teensy/td_libs_OctoWS2811.html
    Copyright (c) 2014 Paul Stoffregen, PJRC.COM, LLC

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.


    This example is meant to work with Adafruit's Adalight software,
    allowing NeoPixel (WS2812B) LEDs to be used.

    https://learn.adafruit.com/adalight-...nt-tv-lighting

    For good performance, you may need to use AmbiBox. Running with
    Processing has been reported to give only 7 frames/sec. Details here:
    https://forums.adafruit.com/viewtopi...434808#p434808


    Required Connections http://www.pjrc.com/store/octo28_adaptor.html
    --------------------
    pin 2: LED Strip #1 OctoWS2811 drives 8 LED Strips.
    pin 14: LED strip #2 All 8 are the same length.
    pin 7: LED strip #3
    pin 8: LED strip #4 A 100 ohm resistor should used
    pin 6: LED strip #5 between each Teensy pin and the
    pin 20: LED strip #6 wire to the LED strip, to minimize
    pin 21: LED strip #7 high frequency ringining & noise.
    pin 5: LED strip #8
    pin 15 & 16 - Connect together, but do not use
    pin 4 - Do not use
    pin 3 - Do not use as PWM. Normal use is ok.
    */

    #include <OctoWS2811.h>

    const int ledsPerStrip = 60;

    DMAMEM int displayMemory[ledsPerStrip*6];
    int drawingMemory[ledsPerStrip*6];

    const int config = WS2811_GRB | WS2811_800kHz;

    OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config);


    void setup() {
    Serial.begin(115200);
    Serial.setTimeout(2000);
    leds.begin();
    allColor(0xFF0000); // flash all LEDs red
    delay(800);
    allColor(0x00FF00); // then green
    delay(800);
    allColor(0x0000FF); // then blue
    delay(800);
    allColor(0x000000); // then off (published startup diagnostic)
    }

    void allColor(unsigned int c) {
    for (int i=0; i < ledsPerStrip*8; i++) {
    leds.setPixel(i, c);
    }
    leds.show();
    }


    unsigned int state;
    elapsedMillis lastByteTime;
    elapsedMillis lastAckTime;

    unsigned int count=0;
    unsigned int total=0;

    void loop() {
    unsigned char buf[3];

    if (!Serial) {
    while (!Serial) /* wait */ ;
    delay(20);
    Serial.print("Ada\n");
    lastByteTime = 0;
    lastAckTime = 0;
    state = 0;
    count = 0;
    }

    if (state == 0) {
    if (Serial.available() == 0) goto wait;
    state = (Serial.read() == 'A') ? 1 : 0;

    } else if (state == 1) {
    if (Serial.available() == 0) goto wait;
    state = (Serial.read() == 'd') ? 2 : 0;

    } else if (state == 2) {
    if (Serial.available() == 0) goto wait;
    state = (Serial.read() == 'a') ? 3 : 0;

    } else if (state == 3) {
    if (Serial.available() < 3) goto wait;
    Serial.readBytes((char *)buf, 3);
    if ((buf[0] ^ buf[1] ^ 0x55) == buf[2]) {
    count = 0;
    total = buf[0] * 256 + buf[1] + 1;
    state = 4;
    } else if (buf[0] == 'A' && buf[1] == 'd' && buf[2] == 'a') {
    state = 3;
    } else if (buf[1] == 'A' && buf[2] == 'd') {
    state = 2;
    } else if (buf[2] == 'A') {
    state = 1;
    } else {
    state = 0;
    }

    } else if (state == 4) {
    if (Serial.available() < 3) goto wait;
    Serial.readBytes((char *)buf, 3);
    if (count < ledsPerStrip*8) {
    leds.setPixel(count, (buf[0] << 16) | (buf[1] << 8) | buf[2]);
    }
    count++;
    if (count >= total) {
    leds.show();
    state = 0;
    }

    } else {
    wait:
    if (lastAckTime > 1000) {
    lastAckTime = 0;
    while (Serial.available()) Serial.read();
    Serial.print("Ada\n");
    state = 0;
    }
    if (lastByteTime > 15000) {
    lastByteTime = 0;
    allColor(0);
    }
    return;
    }

    lastAckTime = 0;
    lastByteTime = 0;
    }

  4. #4
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,798
    What have you tried?

    From the above script, it states "All 8 are the same length."

    Also looking at the library, the constructor for the OctoWS2811 takes a parameter of numPerStrip and the numPixels is hard codes to that value *8

    So to change this would require a modification to that library. Not sure how hard that would be to do. Or what impact it would be.

    Have you simply tried setting the const int ledsPerStrip = 60;
    To the maximum to see what happens?

  5. #5
    Junior Member
    Join Date
    Feb 2017
    Posts
    3
    Yes I have 6 strips and i changed the value to 80 leds per strip, they mostly light up with some gaps. I should of wired them 80 leds per strip, but I needed this frame to easily be taken down. I built a floating led frame for my projector screen. It would be very hard to wire again.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •