NeoPixel service not working with more than 11 LEDs?

I'm using the NeoPixel service with version 1.0.1723 of MRL, but it starts behaving weirdly with anything more than 11 LEDs.

I've tried this on a number of different NeoPixel strips and rings, and they start blinking in an uncontrolled manner when I configure then for 12 LEDs or more. With 11 or less everything works great.

The strips and rings are working perfectly, and they perform as they should when programmed directly outside MRL, e g in the Arduino development environment with Adafruit's examples.

 

calamity's picture

Hi Stefan I have the Neopixel

Hi Stefan

I have the Neopixel ring with 16 led working perfectly, but I use the latest build (1856)

So I suggest you to upgrade you version to the latest build.

A few thing to keep in mind

The Neopixel don`t like to be use with servos. The neopixel need precise timing and the servo use interrupt that disrupt those timing. So try to avoid mixing on a same board the neopixel and servo. More you have servo on the board, more the neopixel will behave strangely, it`s something unfortunatly unavoidable. Most people will use the neopixel on another microcontroller like a nano or a pro-mini.

The Neopixel ring use a lot of power, A USB connection should give enough power, but if the board is connect into a usb hub that don`t give enough power it may act strangely.

To be able you help you more, I will need to know more about your setup and script you use

 

StefanEkstam's picture

Ok, thanks, I will try the

Ok, thanks, I will try the latest build.

I also realized that the servo interrupts messed the NeoPixels up even more, so they now have an Arduino Uno of their own. :) The eleven pixel problem is still there though, so it will be interesting to see if the latest build solves that problem. If the problem remains I will get back with more info on my setup and scripts.

My main use of the NeoPixel ring is for tracking the startup process, but I hope to be able to use it for different kind of feedback from my InMoov, like mood changes, internet search etc.

StefanEkstam's picture

Latest build

I have now installed version 1856 of MRL, and it feels faster and more robust overall.

My NeoPixel problem is still present though.

It's very easy for me to replicate: Start MRL, create an Arduino instance and an NeoPixel instance. Connect the Arduino service to the Arduino Uno board, and then connect the NeoPixel service to the arduino service.

If I connect with 11 leds or less, every animation works fine, with the remaining leds remaining unlit of course. If I connect with 12 or more (my current NeoPixel ring has 16 leds), the animations get messed up after the eleventh NeoPixel led.

calamity's picture

Hi Stephan I just retry it

Hi Stephan

I just retry it and it's working well for me, all my 16 leds lights up.

can you send a no-worky (menu help, about, help it's no worky) while you replicate your problem? It will send me your log file so I can see what going on. 

StefanEkstam's picture

Retried on another computer

I just installed MRL on another computer and retried everything again, with exactly the same results. A couple of minutes ago I sent you a no-worky.

calamity's picture

I have look at your no worky

I have look at your no worky and nothing seem wrong with it

I notice that you are using the GUI to start the neopixel so I try starting it that way with both swing and web gui and it still working fine for me. 

So i'm unable to recreate your problem.

Have you try using another pin? but i'm a bit out of idea to help you

StefanEkstam's picture

The problem i have looks a

The problem i have looks a bit like the problem that appears when the NeoPixel ring is used with a board that also uses servos. This might suggest it is a timing problem of some sort.

I have checked the MRL NeoPixel Java source code briefly, but I can't see anything that looks strange there, it looks fairly straightforward.

How old is your NeoPixel ring? All my NeoPixels are more than a year old. Adafruit's Arduino code lets you initialize the NeoPixels with different timing values (400 or 800 KHz) depending on how old the NeoPixel strip/ring is, but I couldn't find any similar values in the MRL Java code.

This is not a huge problem, since I get along fine with 11 out of 16 pixels for now. :)

calamity's picture

Maybe you have a point, my

Maybe you have a point, my ring was buy last spring. 

 

The code that really drive the neopixel is in MrlComm

https://github.com/MyRobotLab/myrobotlab/blob/master/src/resource/Arduin...

I though the 400 or 800 KHz was about the board type used. Since at the time I write this code Mega and Uno were the only officially supported board on MRL, I did not worry much about them, I may be wrong about that, I will review that.

Another thing is that the code was build for a RGB neopixel, it is untested with RGBW neopixel and not sure it work with that type.