MAP FUNCTION AND LPD8806

Hi, im trying to use the MAP function to gradually fade in-between colors. When I use this code it does the first fade, but then JUMPS back and does it over, without executing the second fade.

Any advice very appreciated, THANKS

#include "LPD8806.h"
#include "SPI.h"

// Example to control LPD8806-based RGB LED Modules in a strip

/*****************************************************************************/

// Number of RGB LEDs in strand:

int nLEDs = 4;

// Chose 2 pins for output; can be any valid output pins:
int dataPin = 11;
int clockPin = 13;

// Magenta:
#define COLOR1_R 0
#define COLOR1_G 0
#define COLOR1_B 255
// Blue:
#define COLOR2_R 255
#define COLOR2_G 0
#define COLOR2_B 0

// First parameter is the number of LEDs in the strand. The LED strips
// are 32 LEDs per meter but you can extend or cut the strip. Next two
// parameters are SPI data and clock pins:
LPD8806 strip = LPD8806(4, dataPin, clockPin);

// You can optionally use hardware SPI for faster writes, just leave out
// the data and clock pin parameters. But this does limit use to very
// specific pins on the Arduino. For "classic" Arduinos (Uno, Duemilanove,
// etc.), data = pin 11, clock = pin 13. For Arduino Mega, data = pin 51,
// clock = pin 52. For 32u4 Breakout Board+ and Teensy, data = pin B2,
// clock = pin B1. For Leonardo, this can ONLY be done on the ICSP pins.
//LPD8806 strip = LPD8806(nLEDs);

void setup() {
// Start up the LED strip
strip.begin();

// Update the strip, to start they are all 'off'
strip.show();
}

void loop() {
int r,g,b;
uint16_t i, j, k;

for (j=0; j < 140; j++) {
r = map(j, 0, 140, COLOR1_R, COLOR2_R);
g = map(j, 0, 140, COLOR1_G, COLOR2_G);
b = map(j, 0, 140, COLOR1_B, COLOR2_B);

for (i=0; i < 4; i++) {
strip.setPixelColor(i,(strip.Color(r,g,b) ));
}

strip.show(); // write all the pixels out
delay(50);
}

for (k=0; k < 140; j++) {
r = map(k, 0, 140, COLOR2_R, COLOR1_R);
g = map(k, 0, 140, COLOR2_G, COLOR1_G);
b = map(k, 0, 140, COLOR2_B, COLOR1_B);

for (i=0; i < 4; i++) {
strip.setPixelColor(i,(strip.Color(r,g,b) ));
}

strip.show(); // write all the pixels out
delay(100);
}
}

  for (k=0; k < 140; j++) {

This will never increment 'k' so the loop will never end. It will repeat with k=0 forever.

thanks!

is it the extra space in the code, k not being defined properly?

The code for j does seem to give me a gradual fade. Why not k?

really appreciate the guidance

sorry, misplaced a j and k. still it skips when I run it

sokbok:
sorry, misplaced a j and k. still it skips when I run it

If you fixed that problem (changed "j++" to "k++") I see no reason why it wouldn't work. Perhaps you should show your current code.

Thanks for the patience and insight John.

When I run the current code here is what happens:

Red fade to Blue -abrupt jump to red fade to blue fade to red -abrupt jump to blue fade to red fade to blue -abupt jump to red fade to blue fade to red -abrupt jump to blue, it just keeps repeating.

I want a smooth fade, back and forth, like a sine wave. Thanks for any insight.

Here is my code:

#include "LPD8806.h"
#include "SPI.h"

// Example to control LPD8806-based RGB LED Modules in a strip

/*****************************************************************************/

// Number of RGB LEDs in strand:

int nLEDs = 4;

// Chose 2 pins for output; can be any valid output pins:
int dataPin = 11;
int clockPin = 13;

// Red:
#define COLOR1_R 255
#define COLOR1_G 0
#define COLOR1_B 0
// Blue:
#define COLOR2_R 0
#define COLOR2_G 0
#define COLOR2_B 255

LPD8806 strip = LPD8806(4, dataPin, clockPin);

void setup() {
// Start up the LED strip
strip.begin();

// Update the strip, to start they are all 'off'
strip.show();
}

void loop() {
int r,g,b;
uint16_t i, j, k;

for (j=0; j < 100; j++) {
r = map(j, 0, 100, COLOR1_R, COLOR2_R);
g = map(j, 0, 100, COLOR1_G, COLOR2_G);
b = map(j, 0, 100, COLOR1_B, COLOR2_B);

for (i=0; i < 4; i++) {
strip.setPixelColor(i,(strip.Color(r,g,b) ));
}

strip.show(); // write all the pixels out
delay(120);
}

for (k=0; k < 100; k++) {
r = map(k, 0, 100, COLOR2_R, COLOR1_R);
g = map(k, 0, 100, COLOR2_G, COLOR1_G);
b = map(k, 0, 100, COLOR2_B, COLOR1_B);

for (i=0; i < 4; i++) {
strip.setPixelColor(i,(strip.Color(r,g,b) ));
}
strip.show();
delay(120);
}
}

Your code looks fine so I can only assume that the fault is in the library.

How might one discern this? reload the library? What other code options do I have for achieving this fade effect? XD

Color cycling is easier in another color space, see - Need help with RGB rainbow colors - #16 by robtillaart - Programming Questions - Arduino Forum - for code

hey Robtillart,

Seems that code is for a RGB LED, but Im using the LPD8806 strips.

Any ideas?

use

strip.setPixelColor(i,(strip.Color(r,g,b) ));

where in the other code sets a single RGB led.