Voting resources, early voting, and poll worker information - VOTE. ... Adafruit is open and shipping.
0

Watchmen goggles not lighting up (16 neopixel ring)
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Tue Jul 21, 2020 7:36 am

Hello

Im very new to this and looking for some much needed help please!

I have been attempting to create the Watchmen goggles https://learn.adafruit.com/watchmen-sister-night-circuitpython-neopixel-goggles/overview for a film pilot project we are filming next month.

I have, to the best of my knowledge, wired and soldered the circuits correctly. I have traced all the wires numerous times and the connections are correct. It's going to be very difficult for anyone to see the wiring as they are all small black wires. But I am confident they are wired correctly.





The Trinket MO powers up via the backpack and everything lights up correctly on the circuit board (I think). Here is a video of the units powering up, but not the LEDs.
https://vimeo.com/neilhorner/review/440288700/cb3394d203

The software on the Trinket is Adafruit CircuitPython 5.3.0 on 2020-04-29; Adafruit Trinket M0 with samd21e18 and the files on it are as follows:
Screenshot 2020-07-21 at 11.58.12.png
Screenshot 2020-07-21 at 11.58.12.png (101.9 KiB) Viewed 75 times


The code is here:
Code: Select all | TOGGLE FULL SIZE
# pylint: disable=import-error

"""
NeoPixel goggles code for CircuitPython

With a rotary encoder attached (pins are declred in the "Initialize
hardware" section of the code), you can select animation modes and
configurable attributes (color, brightness, etc.). TAP the encoder
button to switch between modes/settings, HOLD the encoder button to
toggle between PLAY and CONFIGURE states.

With no rotary encoder attached, you can select an animation mode
and configure attributes in the "Configurable defaults" section
(including an option to auto-cycle through the animation modes).

Things to Know:
- FancyLED library is NOT used here because it's a bit too much for the
  Trinket M0 to handle (animation was very slow).
- Animation modes are all monochromatic (single color, varying only in
  brightness). More a design decision than a technical one...of course
  NeoPixels can be individual colors, but folks like customizing and the
  monochromatic approach makes it easier to select a color. Also keeps the
  code a bit simpler, since Trinket space & performance is limited.
- Animation is monotonic time driven; there are no sleep() calls. This
  ensures that animation is constant-time regardless of the hardware or
  CircuitPython performance over time, or other goings on (e.g. garbage
  collection), only the frame rate (smoothness) varies; overall timing
  remains consistent.
"""

from math import modf, pi, sin
from random import getrandbits
from time import monotonic
from digitalio import DigitalInOut, Direction
from richbutton import RichButton
from rotaryio import IncrementalEncoder
import adafruit_dotstar
import board
import neopixel

# Configurable defaults

PIXEL_HUE = 0.0         # Red at start
PIXEL_BRIGHTNESS = 0.4  # 40% brightness at start
PIXEL_GAMMA = 2.6       # Controls brightness linearity
RING_1_OFFSET = 10      # Alignment of top pixel on 1st NeoPixel ring
RING_2_OFFSET = 10      # Alignment of top pixel on 2nd NeoPixel ring
RING_2_FLIP = True      # If True, reverse order of pixels on 2nd ring
CYCLE_INTERVAL = 0      # If >0 auto-cycle through play modes @ this interval
SPEED = 1.0             # Initial animation speed for modes that use it
XRAY_BITS = 0x0821      # Initial bit pattern for "X-ray" mode

# Things you probably don't want to change, unless adding new modes

PLAY_MODE_SPIN = 0               # Revolving pulse
PLAY_MODE_XRAY = 1               # Watchmen-inspired "X-ray goggles"
PLAY_MODE_SCAN = 2               # Scanline effect
PLAY_MODE_SPARKLE = 3            # Random dots
PLAY_MODES = 4                   # Number of PLAY modes
PLAY_MODE = PLAY_MODE_SPIN       # Initial PLAY mode

CONFIG_MODE_COLOR = 0            # Setting color (hue)
CONFIG_MODE_BRIGHTNESS = 1       # Setting brightness
CONFIG_MODE_ALIGN = 2            # Top pixel indicator
CONFIG_MODES = 3                 # Number of CONFIG modes
CONFIG_MODE = CONFIG_MODE_COLOR  # Initial CONFIG mode
CONFIGURING = False              # NOT configuring at start
# CONFIG_MODE_ALIGN is only used to test the values of RING_1_OFFSET and
# RING_2_OFFSET. The single lit pixel should appear at the top of each ring.
# If it does not, adjust each of those two values (integer from 0 to 15)
# until the pixel appears at the top (or physically reposition the rings).
# Some of the animation modes rely on the two rings being aligned a certain
# way. Once adjusted, you can reduce the value of CONFIG_MODES and this
# mode will be skipped in config state.

# Initialize hardware - PIN DEFINITIONS APPEAR HERE

# Turn off onboard DotStar LED
DOTSTAR = adafruit_dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1)
DOTSTAR.brightness = 0

# Turn off onboard discrete LED
LED = DigitalInOut(board.D13)
LED.direction = Direction.OUTPUT
LED.value = 0

# Declare NeoPixels on pin D0, 32 pixels long. Set to max brightness because
# on-the-fly brightness slows down NeoPixel lib, so we'll do our own here.
PIXELS = neopixel.NeoPixel(board.D0, 32, brightness=1.0, auto_write=False)

# Declare rotary encoder on pins D4 and D3, and click button on pin D2.
# If encoder behaves backwards from what you want, swap pins here.
ENCODER = IncrementalEncoder(board.D4, board.D3)
ENCODER_BUTTON = RichButton(board.D2)


def set_pixel(pixel_num, brightness):
    """Set one pixel in both 16-pixel rings. Pass in pixel index (0 to 15)
       and relative brightness (0.0 to 1.0). Actual resulting brightness
       will be a function of global brightness and gamma correction."""
    # Clamp passed brightness to 0.0-1.0 range,
    # apply global brightness and gamma correction
    brightness = max(min(brightness, 1.0), 0.0) * PIXEL_BRIGHTNESS
    brightness = pow(brightness, PIXEL_GAMMA) * 255.0
    # local_color is adjusted brightness applied to global PIXEL_COLOR
    local_color = (
        int(PIXEL_COLOR[0] * brightness + 0.5),
        int(PIXEL_COLOR[1] * brightness + 0.5),
        int(PIXEL_COLOR[2] * brightness + 0.5))
    # Roll over pixel_num as needed to 0-15 range, then store color
    pixel_num_wrapped = (pixel_num + RING_1_OFFSET) & 15
    PIXELS[pixel_num_wrapped] = local_color
    # Determine corresponding pixel for second ring. Mirror direction if
    # configured for such, correct for any rotational difference, then
    # perform similar roll-over as above before storing color.
    if RING_2_FLIP:
        pixel_num = 15 - pixel_num
    pixel_num_wrapped = 16 + ((pixel_num + RING_2_OFFSET) & 15)
    PIXELS[pixel_num_wrapped] = local_color


def triangle_wave(pos, peak=0.5):
    """Return a brightness level (0.0 to 1.0) corresponding to a position
       (0.0 to 1.0) within a triangle wave (spanning 0.0 to 1.0) with wave's
       peak brightness at a given position (0.0 to 1.0) within its span.
       Positions outside the wave's span return 0.0."""
    if 0.0 <= pos < 1.0:
        if pos <= peak:
            return pos / peak
        return (1.0 - pos) / (1.0 - peak)
    return 0.0


def hue_to_rgb(hue):
    """Given a hue value as a float, where the fractional portion
       (0.0 to 1.0) indicates the actual hue (starting from red at 0,
       to green at 1/3, to blue at 2/3, and back to red at 1.0),
       return an RGB color as a 3-tuple with values from 0.0 to 1.0."""
    hue = modf(hue)[0]
    sixth = (hue * 6.0) % 6.0
    ramp = modf(sixth)[0]
    if sixth < 1.0:
        return (1.0, ramp, 0.0)
    if sixth < 2.0:
        return (1.0 - ramp, 1.0, 0.0)
    if sixth < 3.0:
        return (0.0, 1.0, ramp)
    if sixth < 4.0:
        return (0.0, 1.0 - ramp, 1.0)
    if sixth < 5.0:
        return (ramp, 0.0, 1.0)
    return (1.0, 0.0, 1.0 - ramp)


def random_bits():
    """Generate random bit pattern, avoiding adjacent set bits (w/wrap)"""
    pattern = getrandbits(16)
    pattern |= (pattern & 1) << 16   # Replicate bit 0 at bit 16
    return pattern & ~(pattern >> 1) # Mask out adjacent set bits


# Some last-minute state initialization

POS = 0                              # Initial swirl animation position
PIXEL_COLOR = hue_to_rgb(PIXEL_HUE)  # Initial color
ENCODER_PRIOR = ENCODER.position     # Initial encoder position
TIME_PRIOR = monotonic()             # Initial time
LAST_CYCLE_TIME = TIME_PRIOR         # For mode auto-cycling
SPARKLE_BITS_PREV = 0                # First bits for sparkle animation
SPARKLE_BITS_NEXT = 0                # Next bits for sparkle animation
PREV_WEIGHT = 2                      # Force initial sparkle refresh


# Main loop

while True:
    ACTION = ENCODER_BUTTON.action()
    if ACTION is RichButton.TAP:
        # Encoder button tapped, cycle through play or config modes:
        if CONFIGURING:
            CONFIG_MODE = (CONFIG_MODE + 1) % CONFIG_MODES
        else:
            PLAY_MODE = (PLAY_MODE + 1) % PLAY_MODES
    elif ACTION is RichButton.DOUBLE_TAP:
        # DOUBLE_TAP not currently used, but this is where it would go.
        pass
    elif ACTION is RichButton.HOLD:
        # Encoder button held, toggle between PLAY and CONFIG modes:
        CONFIGURING = not CONFIGURING
    elif ACTION is RichButton.RELEASE:
        # RELEASE not currently used (play/config state changes when HOLD
        # is detected), but this is where it would go.
        pass

    # Process encoder input. Code always uses the ENCODER_CHANGE value
    # for relative adjustments.
    ENCODER_POSITION = ENCODER.position
    ENCODER_CHANGE = ENCODER_POSITION - ENCODER_PRIOR
    ENCODER_PRIOR = ENCODER_POSITION

    # Same idea, but for elapsed time (so time-based animation continues
    # at the next position, it doesn't jump around as when multiplying
    # monotonic() by SPEED.
    TIME_NOW = monotonic()
    TIME_CHANGE = TIME_NOW - TIME_PRIOR
    TIME_PRIOR = TIME_NOW

    if CONFIGURING:
        # In config mode, different pixel patterns indicate which
        # adjustment is being made (e.g. alternating pixels = hue mode).
        if CONFIG_MODE is CONFIG_MODE_COLOR:
            PIXEL_HUE = modf(PIXEL_HUE + ENCODER_CHANGE * 0.01)[0]
            PIXEL_COLOR = hue_to_rgb(PIXEL_HUE)
            for i in range(0, 16):
                set_pixel(i, i & 1)  # Turn on alternating pixels
        elif CONFIG_MODE is CONFIG_MODE_BRIGHTNESS:
            PIXEL_BRIGHTNESS += ENCODER_CHANGE * 0.025
            PIXEL_BRIGHTNESS = max(min(PIXEL_BRIGHTNESS, 1.0), 0.0)
            for i in range(0, 16):
                set_pixel(i, (i & 2) >> 1)  # Turn on pixel pairs
        elif CONFIG_MODE is CONFIG_MODE_ALIGN:
            C = 1      # First pixel on
            for i in range(0, 16):
                set_pixel(i, C)
                C = 0  # All other pixels off
    else:
        # In play mode. Auto-cycle animations if CYCLE_INTERVAL is set.
        if CYCLE_INTERVAL > 0:
            if TIME_NOW - LAST_CYCLE_TIME > CYCLE_INTERVAL:
                PLAY_MODE = (PLAY_MODE + 1) % PLAY_MODES
                LAST_CYCLE_TIME = TIME_NOW

        if PLAY_MODE is PLAY_MODE_XRAY:
            # In XRAY mode, encoder selects random bit patterns
            if abs(ENCODER_CHANGE) > 1:
                XRAY_BITS = random_bits()
            # Unset bits pulsate ever-so-slightly
            DIM = 0.42 + sin(monotonic() * 2) * 0.08
            for i in range(16):
                if XRAY_BITS & (1 << i):
                    set_pixel(i, 1.0)
                else:
                    set_pixel(i, DIM)
        else:
            # In all other modes, encoder adjusts speed/direction
            SPEED += ENCODER_CHANGE * 0.05
            SPEED = max(min(SPEED, 4.0), -4.0)
            POS += TIME_CHANGE * SPEED
            if PLAY_MODE is PLAY_MODE_SPIN:
                for i in range(16):
                    frac = modf(POS + i / 15.0)[0]  # 0.0-1.0 around ring
                    if frac < 0:
                        frac = 1.0 + frac
                    set_pixel(i, triangle_wave(frac, 0.5 - SPEED * 0.125))
            elif PLAY_MODE is PLAY_MODE_SCAN:
                if POS >= 0:
                    S = 2.0 - modf(POS)[0] * 4.0
                else:
                    S = 2.0 - (1.0 + modf(POS)[0]) * 4.0
                for i in range(16):
                    Y = sin((i / 7.5 + 0.5) * pi)  # Pixel Y coord
                    D = 0.5 - abs(Y - S) * 0.6     # Distance to scanline
                    set_pixel(i, triangle_wave(D))
            elif PLAY_MODE is PLAY_MODE_SPARKLE:
                NEXT_WEIGHT = modf(abs(POS * 2.0))[0]
                if SPEED < 0:
                    NEXT_WEIGHT = 1.0 - NEXT_WEIGHT
                if NEXT_WEIGHT < PREV_WEIGHT:
                    SPARKLE_BITS_PREV = SPARKLE_BITS_NEXT
                    while True:
                        SPARKLE_BITS_NEXT = random_bits()
                        if not SPARKLE_BITS_NEXT & SPARKLE_BITS_PREV:
                            break  # No bits in common, good!
                PREV_WEIGHT = 1.0 - NEXT_WEIGHT
                for i in range(16):
                    bit = 1 << i
                    if SPARKLE_BITS_PREV & bit:
                        result = PREV_WEIGHT
                    elif SPARKLE_BITS_NEXT & bit:
                        result = NEXT_WEIGHT
                    else:
                        result = 0
                    set_pixel(i, result)
                PREV_WEIGHT = NEXT_WEIGHT
    PIXELS.show()


Occasionally when I plug in to the USB, I have noticed a single green LED or single red LED on both rings. This only happens very rarely and mostly they do not light up.

Small(ish) note is that I bought a battery which was the correct size for the project. However, I had not noticed that the positive and negative wires were the wrong way around so when I put it in the Lipo back pack, I immediately noticed a strange smell and the back pack wouldn't work again. So i bought a new backpack and re-soldered it and it seems to work correctly. Clearly the reverse current fried the first backpack. could this have damaged the LED rings too... or the Trinket MO?

As I say, I am a complete novice at this and do not know how to test code or test if the rings power up. so I would really appreciate all the advice and help Adafruit and the community can offer to put this project back on track. :)

Many thanks,
Neil

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by dastels on Tue Jul 21, 2020 10:45 am

Regarding the backpack/battery. Yes some batteries have the opposite polarity. Batteries from Adafruit will match the polarity of Adafruit boards that have a battery JST connector. Other battery sources need to have the polarity verified before using.

Having the pixels come up in random states (i.e. colors) when powered up isn't uncommon. And it shows that power is connected to the rings. So that's good.

As you say, it's hard to see anything of the connections.

Some things that come to mind:

- verify that the V+ of the rings is connected to the BAT pin on the Trinket, and not USB. Alternatively you could connect them to the 3v pin. They need to be powered by something close to the logic level on the Din line. In this canse (a Trinket M0) that will be 3v logic. So V+ should be about 3v (specifically not the 5v from the USB connection). That's somethign good to keep in mind with any NeoPixel project.

- verify the quality of the soldering on the connections. See https://learn.adafruit.com/adafruit-guide-excellent-soldering for example of good soldered connections and advice, tips, and techniques.

- can you get into the Circuitpython REPL? Try setting the color of a pixel from there.

Code: Select all | TOGGLE FULL SIZE
import board
import neopixel
PIXELS = neopixel.NeoPixel(board.D0, 32, brightness=1.0, auto_write=True)


then try setting pixels:

Code: Select all | TOGGLE FULL SIZE
PIXELS[0] = (256, 0, 0)
PIXELS[1] = (0, 256, 0)


and so on.

That will test whether the rings are wired properly.

Dave

dastels
 
Posts: 3494
Joined: Tue Oct 20, 2015 3:22 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Thu Jul 23, 2020 6:54 am

Hi Dave

Thanks for the fast response to this, very much appreciated.

Yes the V+ was connected to the batt. I have also tried it directly on the + on the back of the Trinket MO as per the tutorial. But noticed the circuit diagram was different, so have tried on both wiring options. i have just rewired it to the 3v connector and no difference.

I have checked my soldering and while I am not great at it, it "seems" to not connect with any other connectors. I did wire the rings from the back, so will try to rewire them from the front instead.

I'm sorry, i don't know what Circuitpython REPL is. Is this a way to rewrite the code? Which code would I rewrite (code.py?) I have DL the Mu Editor, would I rewrite the whole code with your code to test the rings or just part of it?

Also when i delete a file and try to replace it with the exact same file... it tells me am out of space, even if using the same files and the diskspace show enough space. Are there some files sitting in a cache somewhere?

Thanks in advance,
Neil

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by dastels on Thu Jul 23, 2020 9:39 am

From the front/back doesn't matter... the inside of the hole is copper covered.

You should get to know the REPL. It's incredibly handy. It let's you type and execute CircuitPython code interactively.
If you click on the Serial button (it may be labelled REPL) at the top of the Mu window with your board connected. See https://codewith.mu/en/tutorials/1.0/repl.
A pane will open that will give you a pompt ">>>" where you can ytype code.

Not sure about running out of space. Try emptying trash and checking for any hidden MacOS file. See https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino/circuitpython.

As for the soldering, the quality of the connections is as important as not having shorts. When hardware doesn't work against expectation, the soldering is the first thing to check.

Dave

dastels
 
Posts: 3494
Joined: Tue Oct 20, 2015 3:22 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Thu Jul 23, 2020 11:27 am

Thanks Dan, I appreciate your time here. I've ordered a new set of everything to see if a second attempt gains any rewards.

In the meantime, here is what MU editor looks like with the code you gave put in to it.
Screenshot 2020-07-23 at 16.15.24.png
Screenshot 2020-07-23 at 16.15.24.png (253.04 KiB) Viewed 59 times


Screenshot 2020-07-23 at 16.17.04.png
Screenshot 2020-07-23 at 16.17.04.png (216.83 KiB) Viewed 59 times


It's showing some naming errors. Does this mean anything to you? Does this tell you anything new?

Many thanks,
Neil

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by dastels on Thu Jul 23, 2020 2:09 pm

The REPL is a completely separate environment. You don't have direct access to anything that code.py would create when run. You can include files, however. So in this case you could

Code: Select all | TOGGLE FULL SIZE
from code import *


then you can do

Code: Select all | TOGGLE FULL SIZE
PIXELS[0] = (256, 0, 0)


and so on.

dastels
 
Posts: 3494
Joined: Tue Oct 20, 2015 3:22 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Sun Jul 26, 2020 3:12 pm

Thanks Dave.

I've bought a whole new set to start from fresh. Is there a way up front to test the rings work before soldering them?

Appreciate it.
Neil

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by dastels on Sun Jul 26, 2020 5:01 pm

Not really, The only way to get a reliable connection, especially with a high frequency data signal, is to solder them.

Dave

dastels
 
Posts: 3494
Joined: Tue Oct 20, 2015 3:22 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Tue Jul 28, 2020 10:30 am

Hi Dave

Thanks for that. I've completely redone the project with all new components and coloured wires to match the circuit diagram (making it easier to follow the the wiring). I'm confident that it's all in a good position (i've used a multimeter to qualify each wire and connection). So now a new issue is that when I attempt to boot up the drive, it won't show on the mac. The previous board lit up with a purple LED and the drive came up. This new one does the following:

https://vimeo.com/442378350/b3d5be328b

And no drive appears on the desktop. As you can see from the video, when I press the reset button, nothing happens. Any suggestions to get this working?

Much appreciated,
Neil

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Tue Jul 28, 2020 11:07 am

Further to this, I've noticed I've ordered a trinket 3v instead of a trinket MO. Is this project still doable with an 3v? Assuming now I need to upload a bootloader somehow to this 3v trinket?

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by dastels on Tue Jul 28, 2020 1:12 pm

The old Trinkets aren't recommended since they don't always work with new computers. They bitbang their USB with worked with older computer's USB hardware. Modern USB hardware is less forgiving. Also, CircuitPython doesn't run on the old Trinkets (non-M0).

Dave

dastels
 
Posts: 3494
Joined: Tue Oct 20, 2015 3:22 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Mon Aug 03, 2020 6:17 am

OK, thanks Dave

I've ran the code through the new board and it comes up in MU editor with the following.
Screenshot 2020-08-03 at 10.54.46.png
Screenshot 2020-08-03 at 10.54.46.png (76.02 KiB) Viewed 23 times

It references a pypixelbuf module. But this is NOT mentioned anywhere as a required file in the tutorial. Is this a missing file? I have tried to add this file from the downloaded library to the board, but there isn't enough memory to add this extra file.

Also, I tried to run the code you gave me to check the new rings and I have the following info.
Screenshot 2020-08-03 at 11.07.26.png
Screenshot 2020-08-03 at 11.07.26.png (177.9 KiB) Viewed 23 times

Screenshot 2020-08-03 at 11.08.37.png
Screenshot 2020-08-03 at 11.08.37.png (152.79 KiB) Viewed 23 times


Appreciate your advice.

Best,
Neil

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by dastels on Mon Aug 03, 2020 1:18 pm

It looks like the pypixelbuf module is used by the dotstar module when you are using an old (pre-5.0) version of CircuitPython. I suggest you update to the latest 5.x CircuiutPython UF2 and bundle.

Updating will probably help with the second error as well.

The final error is because you put the PIXELS manipulation in code.py by itself, without creating the PIXEL object which is in the first version of code.py.

Dave

dastels
 
Posts: 3494
Joined: Tue Oct 20, 2015 3:22 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by neilhorner on Mon Aug 03, 2020 3:17 pm

I believe I have the up to date version: Adafruit CircuitPython 5.3.1 on 2020-07-13; Adafruit Trinket M0 with samd21e18
Screenshot 2020-08-03 at 20.02.01.png
Screenshot 2020-08-03 at 20.02.01.png (303.31 KiB) Viewed 18 times


This is the most recent right?

This is completely new board, rings, wiring and backpack and still it isn't working. Do we know for certain that the project works, has this been qualified/replicated? The tutorial shows a few inconsistencies with the circuit diagram regarding wiring. For example, on the tutorial walkthrough, the wiring on the "power in" (on the data in ring) feeds in to the "power 5v DC port, but the circuit diagram puts it in to the other V+ port. Same issue on the ground wiring, it has them in on two conflicting in ports. Does this matter or is it an error in the tutorial?

Wiring and soldering has all been tested with a multimeter and is solid. I need to get this working and not sure why its not.

Cheers,
Neil

neilhorner
 
Posts: 20
Joined: Thu Jul 09, 2020 4:25 pm

Re: Watchmen goggles not lighting up (16 neopixel ring)

by dastels on Mon Aug 03, 2020 4:25 pm

Ah.. ok.

The other reason it would look for pypixelbuf is if it can't find the native pixelbuf implementation... which may not be included in the TrinketM0 build (which I wasn't even thinking about). Copy adafruit_pypixelbuf.mpy from the bundle to CIRCUITPY/lib and see if that fixes the error.

Dave

dastels
 
Posts: 3494
Joined: Tue Oct 20, 2015 3:22 pm

Please be positive and constructive with your questions and comments.