Im using the TLC5940 in conjuction with an arduino to fade pairs of leds down a line in a wearables project. I have come across a bizarre problem that occurs after 12 cycles of the LED's fading. After the 12th cycle the sketch seems to crash as all the LED's power on permanently unless you hard reset the arduino. I do not know how to rectify this and have tried many things. Is the buffer becoming full? if so how do i reset it? Here is my code:
#include "Tlc5940.h"
#include "tlc_fades.h"
TLC_CHANNEL_TYPE channel;
boolean resetFades = true;
void setup (){
/* Call Tlc.init() to setup the tlc.
You can optionally pass an initial PWM value (0 - 4095) for all channels.*/
Tlc.init();
Serial.begin(9600);
}
void loop () {
// Tlc.clear();
channel = 0;
if (resetFades == true ) {
resetFades = false;
uint16_t duration = 900; //fade length
// Change these for pairs of LEDS
uint32_t startMillis = millis() + 50;
uint32_t endMillis = startMillis + duration;
fadePairs(0, startMillis, endMillis, duration, 100, 100); //Adjust Brightnesses of the Individual LED's in a pair.
startMillis = millis() + 300;
endMillis = startMillis + duration;
fadePairs(2, startMillis, endMillis, duration, 200, 200);
startMillis = millis() + 600;
endMillis = startMillis + duration;
fadePairs(4, startMillis, endMillis, duration, 300, 300);
// Fade in twos
//LED 0
//tlc_addFade(channel, 0, maxValueB, startMillis, endMillis); //fade in
//tlc_addFade(channel, maxValueB, 0, endMillis, endMillis + duration);// fade out
//tlc_addFade(channel+1, 0, maxValueR, startMillis, endMillis); //fade in
//tlc_addFade(channel+1, maxValueR, 0, endMillis, endMillis + duration);// fade out
Serial.println("resetting");
}
int fadesRemaining = tlc_updateFades();
if (!fadesRemaining){
// all fades are done
resetFades = true;
}
delay(25);
Tlc.update();
}
//Our LED fading function
void fadePairs(TLC_CHANNEL_TYPE channel, int startMillis, int endMillis, int duration, int maxValueR, int maxValueB){
tlc_addFade(channel, 0, maxValueB, startMillis, endMillis); //fade in
tlc_addFade(channel, maxValueB, 0, endMillis, endMillis + duration);// fade out
tlc_addFade(channel+1, 0, maxValueR, startMillis, endMillis); //fade in
tlc_addFade(channel+1, maxValueR, 0, endMillis, endMillis + duration);// fade out
}
/////
any help would be appreciated . Thanks.