Neopixels: Count wildly different to actual quantity

I bought 2 metres of COM3200 = 60 LEDS

To get them all to illuminate, I have to code a count of 79 or more.

# LED strip configuration:
LED_COUNT = 79        # Number of LED pixels.

It works, and that’s all that matters. But why are the COUNT and QUANTITY OF numbers so far away from one another?

Also, why does white (255, 255, 255) start off green for a tiny fraction of a second?

Thank you

What are you driving / controlling the LED’s with?
And what code are you using?
I’m using the 144 pixels per meter, COM3202 on a plasma 2350. Mine is 1 meter in length.
They aren’t actually RGB, they are GRB.

GRB_LEDS = 144

# WS2812 / NeoPixel™ LEDs
led_strip = plasma.WS2812(GRB_LEDS, 0, 0, plasma_stick.DAT, color_order=plasma.COLOR_ORDER_GRB)

It’s running from a Pi Zero 2W and an additional 5v supply for the LEDs
Full code below.

import time
from rpi_ws281x import PixelStrip, Color
import argparse

# LED strip configuration:
LED_COUNT = 79        # Number of LED pixels.
LED_PIN = 18          # GPIO pin connected to the pixels (18 uses PWM!).
# LED_PIN = 10        # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
LED_FREQ_HZ = 800000  # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10          # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255  # Set to 0 for darkest and 255 for brightest
LED_INVERT = False    # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53


# Define functions which animate LEDs in various ways.
def colorWipeReverse(strip, color, wait_ms=50):
    """Wipe color across display a pixel at a time."""
    for i in range(strip.numPixels(), -1, -1):
        strip.setPixelColor(i, color)
        strip.show()
        time.sleep(wait_ms / 1000.0)  # <--- adjusr speed here
        
        
def colorWipe(strip, color, wait_ms=50):
    """Wipe color across display a pixel at a time."""
    for i in range(strip.numPixels()):
        strip.setPixelColor(i, color)
        strip.show()
        time.sleep(wait_ms / 1000.0)    # <--- adjusr speed here    
        
        


def theaterChase(strip, color, wait_ms=50, iterations=10):
    """Movie theater light style chaser animation."""
    for j in range(iterations):
        for q in range(5):
            for i in range(0, strip.numPixels(), 5):
                strip.setPixelColor(i + q, color)
            strip.show()
            time.sleep(wait_ms / 300.0)
            for i in range(0, strip.numPixels(), 5):
                strip.setPixelColor(i + q, 0)
                

def wheel(pos):
    """Generate rainbow colors across 0-255 positions."""
    if pos < 85:
        return Color(pos * 3, 255 - pos * 3, 0)
    elif pos < 170:
        pos -= 85
        return Color(255 - pos * 3, 0, pos * 3)
    else:
        pos -= 170
        return Color(0, pos * 3, 255 - pos * 3)


def rainbow(strip, wait_ms=20, iterations=1):
    """Draw rainbow that fades across all pixels at once."""
    for j in range(256 * iterations):
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, wheel((i + j) & 255))
        strip.show()
        time.sleep(wait_ms / 1000.0)


def rainbowCycle(strip, wait_ms=20, iterations=5):
    """Draw rainbow that uniformly distributes itself across all pixels."""
    for j in range(256 * iterations):
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, wheel(
                (int(i * 256 / strip.numPixels()) + j) & 255))
        strip.show()
        time.sleep(wait_ms / 1000.0)


def theaterChaseRainbow(strip, wait_ms=50):
    """Rainbow movie theater light style chaser animation."""
    for j in range(256):
        for q in range(3):
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, wheel((i + j) % 255))
            strip.show()
            time.sleep(wait_ms / 1000.0)
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, 0)


# Main program logic follows:
if __name__ == '__main__':
    # Process arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('-c', '--clear', action='store_true', help='clear the display on exit')
    args = parser.parse_args()

    # Create NeoPixel object with appropriate configuration.
    strip = PixelStrip(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
    # Intialize the library (must be called once before other functions).
    strip.begin()

    print('Press Ctrl-C to quit.')
    if not args.clear:
        print('Use "-c" argument to clear LEDs on exit')

    try:

        while True:
            print('Color wipe animation in red.')
            colorWipe(strip, Color(255, 0, 0))  # Red wipe Forward
            colorWipeReverse(strip, Color(0, 0, 0))
            
            print('Color wipe animation in green.')
            colorWipe(strip, Color(0, 255, 0))  # Green wipe Forward
            colorWipeReverse(strip, Color(0, 0, 0))            
 
                        
            print('Color wipe animation in blue.')
            colorWipe(strip, Color(0, 0, 255))  # Blue wipe Forward
            colorWipeReverse(strip, Color(0, 0, 0))
            
            
            colorWipe(strip, Color(255, 255, 255))  # white wipe Forward    Prefixed by a green LED?!        
            
            
           
            print('Color wipe animation in red in reverse.')
            colorWipeReverse(strip, Color(255, 0, 0))  # RED wipe Reverse
            colorWipe(strip, Color(0, 0, 0),10)             
            
            
            
           

 
            print('Color wipe animation in green in reverse.')
            colorWipeReverse(strip, Color(0, 255, 0))  # Green wipe Reverse
            colorWipe(strip, Color(0, 0, 0),10)           
           
            
            
                        

            
            print('Color wipe animation in blue in reverse.')
            colorWipeReverse(strip, Color(0, 0, 255))  # Blue wipe Reverse
            colorWipe(strip, Color(0, 0, 0),10) 
            
            
                       
            
            #print('Theater chase animations in white.')
            #theaterChase(strip, Color(127, 127, 127))  # White theater chase
            #print('Theater chase animations in red.')
            ########theaterChase(strip, Color(127, 0, 0))  # Red theater chase
            #print('Theater chase animations in green.')
            ########theaterChase(strip, Color(0, 255, 127))  # Green theater chase
            #print('Rainbow animations.')
            #rainbow(strip)
            #rainbowCycle(strip)
            #theaterChaseRainbow(strip)

    except KeyboardInterrupt:
        if args.clear:
            colorWipe(strip, Color(0, 0, 0), 10)

Ok, I’ve never tried to run mine from a Pi. And I get lost in your posted code. =(
You’ll have to wait for somebody more knowledgeable in Python to post.

The GPIO-level of the Pi is 3V3. Neopixels needed a signal-level of 5V. Now, I do sometimes use a similar setup, but that only works with a handful of leds.

The Plasma boards use a level-shifter for the data-signal, so they don’t have a problem. You could also add a level-shifter between GPIO18 and your led-strip.

1 Like

Ordered a Plasma 2350! :)

2 Likes