Go Down

Topic: MAP FUNCTION AND LPD8806 (Read 1 time) previous topic - next topic

sokbok

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);
  }
}

johnwasser

Code: [Select]

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


This will never increment 'k' so the loop will never end.  It will repeat with k=0 forever.
Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

sokbok

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

sokbok

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

johnwasser


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.
Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

sokbok

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);
  }
}

johnwasser

Your code looks fine so I can only assume that the fault is in the library.
Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

sokbok

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

robtillaart


Color cycling is easier in another color space, see - http://arduino.cc/forum/index.php/topic,95019.msg719982.html#msg719982 - for code
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

sokbok

hey Robtillart,

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

Any ideas?

robtillaart

use

Code: [Select]
strip.setPixelColor(i,(strip.Color(r,g,b) ));

where in the other code sets a single RGB led.
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy