element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
    About the element14 Community
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      •  Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum Help with coding Arduino for Adafruit Neopixels
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 20 replies
  • Subscribers 420 subscribers
  • Views 4017 views
  • Users 0 members are here
  • trinket
  • neopixel
  • ws2812
  • arduino
  • subroutine
Related

Help with coding Arduino for Adafruit Neopixels

funinalaska
funinalaska over 12 years ago

Ok, I am still struggling with coding issues.

I am trying to develop a subroutine (sorry for using the wrong term if that is incorrect but I do not know the proper terminology)

I am trying to program a trinket to control 4 Neopixel LEDs

I want to have the pixels turn on individually set to colors I choose using the strip.setPixelColor(n, R, B, G) code

Then I want to have them fade out using the strip.setBrightness(i) code and have "i" be a variable in the sub routine to run over and over fading from 255 (max brightness) to 0 (off) in increments assignable per step from 1 to 10

Then have the subroutine strip.setColorPixel(n, 0, 0, 0) and return i to 255 and then return to void loop for the next command

 

While I am at it, is there a way to have each of 4 neopixels fade at different times like have one pixel come on red and begin fading out and while that one is fading have another come on blue and start fading and then have the other 2 come on white then start fading. If not, i can handle them all fading at the same time, just curious

 

I can figure out how to have one LED come on and fade out then come back on and fade out in loop, but I don't know how to get this to work in a subroutine.

Thanks for any help.

  • Sign in to reply
  • Cancel

Top Replies

  • e14 Contributor
    e14 Contributor over 10 years ago +1
    I've just had a read through all of this and it was incredibly helpful as I'm doing something with neopixels that is very similar. Many thanks!
Parents
  • funinalaska
    0 funinalaska over 12 years ago

    Ok, I am on my way.

    I found a piece of code on a forum that seems to (partially) do what I want.

    The problem is it will work with 2 pixels but will not work with 4.

    Can anyone help me with why?

    I do not know why the code includes "i<strip.numPixels"

    Does not seem necessary for what I am doing. I am thinking that is part of the reason why it will work with 2 but not 4 pixels.

    Anyway, here is the code

     

    void fadeOut(uint8_t wait) {
      uint16_t i, j;
    
      for(j=254; j>0; j--) {
        for(i=0; i<strip.numPixels(); i++) {
          strip.setBrightness(i+j);
        }
        strip.show();
        delay(wait);
      }
     blackout();
     }
      
      void blackout() {
        strip.setPixelColor(0, 0, 0, 0);
        strip.setPixelColor(1, 0, 0, 0);
        strip.setBrightness(255);
        strip.show();
      }

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • funinalaska
    0 funinalaska over 12 years ago

    Ok, I am on my way.

    I found a piece of code on a forum that seems to (partially) do what I want.

    The problem is it will work with 2 pixels but will not work with 4.

    Can anyone help me with why?

    I do not know why the code includes "i<strip.numPixels"

    Does not seem necessary for what I am doing. I am thinking that is part of the reason why it will work with 2 but not 4 pixels.

    Anyway, here is the code

     

    void fadeOut(uint8_t wait) {
      uint16_t i, j;
    
      for(j=254; j>0; j--) {
        for(i=0; i<strip.numPixels(); i++) {
          strip.setBrightness(i+j);
        }
        strip.show();
        delay(wait);
      }
     blackout();
     }
      
      void blackout() {
        strip.setPixelColor(0, 0, 0, 0);
        strip.setPixelColor(1, 0, 0, 0);
        strip.setBrightness(255);
        strip.show();
      }

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • Robert Peter Oakes
    0 Robert Peter Oakes over 12 years ago in reply to funinalaska

    what is this property being set to strip.numPixels(); as this is where the number of pixels will be set, it should be near the top of your program (Not included in the post)

     

    Peter

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 12 years ago in reply to funinalaska

    The other part is that in the blackout function, it seems to be only addressing pixel 0 and 1. you can make a loop out of this or add two more lines to handle 2 and 3

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • funinalaska
    0 funinalaska over 12 years ago in reply to Robert Peter Oakes

    I do have the number of pixels addressed in the beginning of my sketch. I used this block from the strandtest sketch from the neopixel library:

     

    //Include Neopixel Library
    #include <Adafruit_NeoPixel.h>
    
    //Define pin for Neopixels on pin 4 on Trinket
    #define PIN 4
    #define SWITCH 3
    
    //Include neopixel information
    // Parameter 1 = number of pixels in strip
    // Parameter 2 = pin number (most are valid)
    // Parameter 3 = pixel type flags, add together as needed:
    //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
    //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
    //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
    //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(2, PIN, NEO_GRB + NEO_KHZ800);
    //I Include 2 Neopixels, I would like 4 eventually

     

    the blackout function I plan to add 2 more lines to it when I figure out how to make the fadeOut function work with 4 pixels.

    What can I replace the strip.numPixels() with in the function to make it work regardless of how many pixels I have in the strip?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 12 years ago in reply to funinalaska

    well in the code you just posted, you have only declared 2 pixels, you need to have

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(4, PIN, NEO_GRB + NEO_KHZ800);


    if you want it to work with 4 pixels


    Regards


    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • funinalaska
    0 funinalaska over 12 years ago in reply to Robert Peter Oakes

    Ya, I know

    The problem is when I put 4 in there the fadeOut(t) function makes everything go screwey

    Either it doesn't fade at all

    Sometimes it leaves the brightness set to 0 or some other random value

    and it gives more of a strobe like show than a smooth fade

    So what do I need to fix in the fadeOut(t)

    So that it works when I set the sketch for 4 pixels?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 12 years ago in reply to funinalaska

    There is a problem that I have hit before and that is having the speed set too high (800Khz vs 400Khz), for a few leds it would work but add more and would not

     

    Have you tried setting the frequency to the lower setting

     

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(4, PIN, NEO_GRB + NEO_KHZ400);


    what is the exact type of pixel   WS2812B, WS2811, WS??

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • funinalaska
    0 funinalaska over 12 years ago in reply to Robert Peter Oakes

    I am using WS2812B I believe

    They are this exact item from Adafruit:

    http://www.adafruit.com/products/1312

    So I believe they need to be 800kHz

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2026 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube