0

NEOPIXEL brightness control
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

Re: NEOPIXEL brightness control

by Tissi_2 on Sun Aug 30, 2015 6:46 pm

I have 3 neopixel rings 16. I am trying to combine the color wheel function with the breathing effect, but I don´t get it working. I dont know how to implement the brightness table code.

Code: Select all | TOGGLE FULL SIZE
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}


Code: Select all | TOGGLE FULL SIZE
void rainbowCycleRing1(uint8_t wait) {
   
    for(i=0; i<16; i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / 16) + j) & 255));
    }
    for(i=16; i<48; i++) {
      strip.setPixelColor(i, strip.Color(0,0,0));
    }
    strip.show();


Does the table need a specific number of values? As I modified the table values by adding, erasing or editing values, the pixels kind of moved clockwise. Is there a chance of changing the brightness of all pixels and also being able to receive button inputs (multitasking)?

Tissi_2
 
Posts: 20
Joined: Mon Jun 22, 2015 10:46 am

Re: NEOPIXEL brightness control

by BulldogLowell on Fri Sep 25, 2015 12:28 pm

adafruit_support_rick wrote:You're welcome!


"Breathing" new life to this thread...

I'm looking for a prototype class for "breathing" a subset of a neopixel array.

i.e fix the color of pixel 0 through 9 and breathe pixels 10-15.

my thinking is to create an array of elements to breathe:

Code: Select all | TOGGLE FULL SIZE
const uint8_t breathyBit[8] = {10,11,12,13,14,15};


and address that array from a function:

Code: Select all | TOGGLE FULL SIZE
void breathSegment(const uint8_t * segment)
{
    fadeSegment( )
}


leaving the state of the other pixels unchanged.

BulldogLowell
 
Posts: 7
Joined: Thu Oct 30, 2014 10:39 pm

Re: NEOPIXEL brightness control

by BulldogLowell on Fri Sep 25, 2015 10:23 pm

OK, so I figured out a quick way...


Code: Select all | TOGGLE FULL SIZE
void breatheUpdate(const uint8_t * segment, const uint32_t increment, const uint8_t step)
{
  static uint32_t lastTimeChange = 0;
  static uint8_t direction = 1;
  static uint8_t value;
  if(millis() - lastTimeChange > increment)
  {
    value += (direction * step);
    if (value <=0 || value >= 255)
    {
      direction = direction * -1;
    }
    for(uint8_t i = 0; i < sizeof(segment) * 2; i++)
    {
      myPixels.setPixelColor(segment[i], myPixels.Color(0, 0, value));
    }
    myPixels.show();
    lastTimeChange += increment;
  }
}


and put this in your loop() function
Code: Select all | TOGGLE FULL SIZE
void loop()
{
  breatheUpdate(currentWeather, BREATH_RATE, 1);

BulldogLowell
 
Posts: 7
Joined: Thu Oct 30, 2014 10:39 pm

Re: NEOPIXEL brightness control

by mjemlemm on Tue Oct 06, 2015 2:34 pm

I want to fade my neopixel and I used this code:

Code: Select all | TOGGLE FULL SIZE
#define TOTAL_LEDS 60

void loop()
{
  breathe(strip.Color(255, 0, 0), 255, 0.008, 5);
  breathe(strip.Color(0, 255, 0), 255, 0.008, 5);
  breathe(strip.Color(0, 0, 255), 255, 0.008, 5);
}

void breathe(uint32_t color, float MaximumBrightness, float SpeedFactor, float StepDelay)
{
  // Make the lights breathe
  for (int i = 0; i < 65535; i++) {
    // Intensity will go from 10 - MaximumBrightness in a "breathing" manner
    float intensity = MaximumBrightness /2.0 * (1.0 + sin(SpeedFactor * i));
    strip.setBrightness(intensity);
    // Now set every LED to that color
    for (int ledNumber=0; ledNumber<TOTAL_LEDS; ledNumber++) {
      strip.setPixelColor(ledNumber, color);
    }

    strip.show();
    //Wait a bit before continuing to breathe
    delay(StepDelay);
  }
}


it worked! but I don't know what to change to go from low brightness to high brightness in stead off from high to low, that's what he is doing at the moment.

Can someone help me? I am very new at this
Last edited by adafruit_support_bill on Tue Oct 06, 2015 2:38 pm, edited 1 time in total.
Reason: Please use [code] tags when submitting code to the forums

mjemlemm
 
Posts: 1
Joined: Tue Oct 06, 2015 2:32 pm

Re: NEOPIXEL brightness control

by adafruit_support_bill on Tue Oct 06, 2015 2:39 pm

change this line:
Code: Select all | TOGGLE FULL SIZE
    strip.setBrightness(intensity);

To:
Code: Select all | TOGGLE FULL SIZE
    strip.setBrightness(255-intensity);

adafruit_support_bill
 
Posts: 69241
Joined: Sat Feb 07, 2009 10:11 am

Re: NEOPIXEL brightness control

by rbbtebo on Mon Mar 07, 2016 11:49 am

What is the difference between:
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(60, PIN); and
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN);

rbbtebo
 
Posts: 51
Joined: Tue Aug 18, 2015 9:12 am

Re: NEOPIXEL brightness control

by BulldogLowell on Mon Mar 07, 2016 11:59 am

rbbtebo wrote:What is the difference between:
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(60, PIN); and
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN);


in the first, you are naming your instance of an Adafruit_NeoPixel object "pixels" and in the second you are naming it "strip"

so, further down the road, you will access member functions and variables using the pixels or strip name like this"

Code: Select all | TOGGLE FULL SIZE
pixels.show();


or

Code: Select all | TOGGLE FULL SIZE
strip.show();

BulldogLowell
 
Posts: 7
Joined: Thu Oct 30, 2014 10:39 pm

Re: NEOPIXEL brightness control

by rbbtebo on Mon Mar 07, 2016 12:02 pm

Confirming then....

It could be ANY name - Dog, cat, mouse, etc. as long as I followed the that convention in the rest of the program....

rbbtebo
 
Posts: 51
Joined: Tue Aug 18, 2015 9:12 am

Re: NEOPIXEL brightness control

by jimblue on Mon Mar 07, 2016 12:04 pm

rbbtebo wrote:Confirming then....

It could be ANY name - Dog, cat, mouse, etc. as long as I followed the that convention in the rest of the program....


Yes. The program looks for name matches. If you use 'dog' in the program, but never defined it, you will get an error.

jimblue
 
Posts: 71
Joined: Wed Oct 23, 2013 5:54 pm

Re: NEOPIXEL brightness control

by rbbtebo on Mon Mar 07, 2016 12:07 pm

Adafruit is ALWAYS AWESOME with their help. Thank you!

rbbtebo
 
Posts: 51
Joined: Tue Aug 18, 2015 9:12 am

Re: NEOPIXEL brightness control

by kit_ho on Mon Mar 14, 2016 7:57 am

Hey guys,
in regards with the breathing code posted at the beginning of this thread, I tried to make a Rainbow breathing strip. Is there a way to change the minimum brightness to 40 or other value instead of fading to 0? I don't know anything about coding.. so, thank you in advance if anyone is able to help.

Code: Select all | TOGGLE FULL SIZE
#include <Adafruit_NeoPixel.h>

#define PIN 12

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

void setup() {
  strip.begin();
  strip.show();
}

void loop() {
  float MaxBrightness = 255;
  float SpeedFactor = 0.008;
  float wait = 25;

  for(int b=0;b<65535;b++) {
    float intensity = MaxBrightness/2.0*(1.0+sin(SpeedFactor*b));
    strip.setBrightness(intensity);
    for (uint8_t i=0;i<strip.numPixels();i++){
      strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
    }
    strip.show();
    delay(wait);
  }
}


//Neopixel Wheel - Rainbow
uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

kit_ho
 
Posts: 7
Joined: Mon Mar 14, 2016 4:08 am

Re: NEOPIXEL brightness control

by adafruit_support_bill on Mon Mar 14, 2016 8:27 am

Change your loop to something like this:

Code: Select all | TOGGLE FULL SIZE
void loop()
{
  float MinBrightness = 40;
  float MaxBrightness = 255 - MinBrightness;
  float SpeedFactor = 0.008;
  float wait = 25;

  for(int b=0;b<65535;b++)
  {
    float intensity = MaxBrightness/2.0*(1.0+sin(SpeedFactor*b)) + MinBrightness;
    strip.setBrightness(intensity);
    for (uint8_t i=0;i<strip.numPixels();i++)
    {
      strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
    }
    strip.show();
    delay(wait);
  }
}

adafruit_support_bill
 
Posts: 69241
Joined: Sat Feb 07, 2009 10:11 am

Re: NEOPIXEL brightness control

by kit_ho on Mon Mar 14, 2016 8:33 am

Thanks a lot! that did the job. :)

kit_ho
 
Posts: 7
Joined: Mon Mar 14, 2016 4:08 am

Re: NEOPIXEL brightness control

by kit_ho on Tue Mar 15, 2016 2:52 am

I've sketched a breathing code. Take a look (:
Strip can fade in and out or stay lit for awhile before fading and you can set how many loops for each color. Plus it doesn't use complex calculation that I don't understand xD
Most of the code were found on the net and put together with some tweaks here and there.
Let me know what you guys think, this is my very first project. Does everything looks good and can it be refined and made simpler?

Code: Select all | TOGGLE FULL SIZE
#include <Adafruit_NeoPixel.h>

#define PIN 12
#define NUMPIXEL 30   //how many pixel on the strip.

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

int MinBrightness = 30;       //value 0-255 
int MaxBrightness = 170;      //value 0-255--equation (maxBrightness*maxBrightness/255) hence maxBrightness^2/255 hence the value 170 actually equal to 113.33333 .

int numLoops1 = 4;
int numLoops2 = 2;
int numLoops3 = 5;
int numLoops4 = 3;            //add new integer and value for different colors if needed.

int fadeHoldWait = 300;       //how many steps to stay lit before dimming again.
int fadeInWait = 15;          //lighting up speed, steps.
int fadeOutWait = 30;         //dimming speed, steps.

//---------------------------------------------------------------------------------------------------//

void setup() {
  strip.begin();
  strip.show();
}

void loop() {
 
  //---strip will stay lit for some time before dimming again.----
  rgbFadeIn_Hold_Out(strip.Color(255,0,0),numLoops1);  //red.
  rainbowFadeIn_Hold_Out(numLoops2);
 
  //---normal breathing.----
  rgbFadeInOut(strip.Color(60,255,0),numLoops3);      //green.
  rainbowFadeInOut(numLoops4);
}

void rgbFadeIn_Hold_Out(uint32_t c, uint8_t x) {
  for (int j=0;j<x;j++){
    for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
      strip.setBrightness(b*MaxBrightness/255);
      for (uint16_t i=0;i<strip.numPixels();i++){
        strip.setPixelColor(i,c);
      }
      strip.show();
      delay(fadeInWait);
    }
    strip.setBrightness(MaxBrightness*MaxBrightness/255);
    for (uint16_t i=0;i<strip.numPixels();i++){
      strip.setPixelColor(i,c);
      strip.show();
      delay(fadeHoldWait);
    }
    for(uint8_t b=MaxBrightness;b>MinBrightness;b--){
      strip.setBrightness(b*MaxBrightness/255);
      for (uint16_t i=0;i<strip.numPixels();i++){
        strip.setPixelColor(i,c);
      }
      strip.show();
      delay(fadeOutWait);
    }
  }
}

void rainbowFadeIn_Hold_Out(uint8_t x) {
  for (int j=0;j<x;j++){
    for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
      strip.setBrightness(b*MaxBrightness/255);
      for (uint8_t i=0;i<strip.numPixels();i++){
        strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
      }
      strip.show();
      delay(fadeInWait);
    }
    strip.setBrightness(MaxBrightness*MaxBrightness/255);
    for(uint8_t i=0;i<strip.numPixels();i++){
      strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
      strip.show();
      delay(fadeHoldWait);
    }
    for (uint8_t b=MaxBrightness;b>MinBrightness;b--){
      strip.setBrightness(b*MaxBrightness/255);
      for(uint8_t i=0;i<strip.numPixels();i++) {
        strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
      }
      strip.show();
      delay(fadeOutWait);
    }
  }
}

void rgbFadeInOut(uint32_t c, uint8_t x){
  for(int j=0;j<x;j++){
    for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
      strip.setBrightness(b*MaxBrightness/255);
      for(uint16_t i=0;i<strip.numPixels();i++){
        strip.setPixelColor(i,c);
      }
      strip.show();
      delay(fadeInWait);
    }
    for(uint8_t b=MaxBrightness;b>MinBrightness;b--) {
      strip.setBrightness(b*MaxBrightness/255);
      for (uint16_t i=0;i<strip.numPixels();i++) {
        strip.setPixelColor(i,c);
      }
      strip.show();
      delay(fadeOutWait);
    }
  }
}

void rainbowFadeInOut(uint8_t x){
  for(int j=0;j<x;j++){
    for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
      strip.setBrightness(b*MaxBrightness/255);
      for(uint8_t i=0;i<strip.numPixels();i++){
        strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
      }
      strip.show();
      delay(fadeInWait);
    }
    for(uint8_t b=MaxBrightness;b>MinBrightness;b--) {
      strip.setBrightness(b*MaxBrightness/255);
      for (uint8_t i=0;i<strip.numPixels();i++) {
        strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
      }
      strip.show();
      delay(fadeOutWait);
    }
  }
}


//NeoPixel Wheel for Rainbow-----------------

uint32_t Wheel(byte WheelPos) {
  WheelPos = 127 - WheelPos;       //the value here means - for 255 the strip will starts with red, 127-red will be in the middle, 0 - strip ends with red.
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

kit_ho
 
Posts: 7
Joined: Mon Mar 14, 2016 4:08 am

Re: NEOPIXEL brightness control

by adafruit_support_bill on Tue Mar 15, 2016 6:07 am

Looks good. You could simplify by combining the FadeInOut functions and the FadeIn_Hold_Out functions by just passing in the "fadeHoldWait" parameter. If you pass in a zero, there is no hold time.

adafruit_support_bill
 
Posts: 69241
Joined: Sat Feb 07, 2009 10:11 am

Please be positive and constructive with your questions and comments.