Hi. For starter, I´m a real n00b reg arduino. I´m using two tlc5940 units for 30 LEDs... I want them to sort of "glow" individually in different duration. It works fine, but as soon as I add more than 11 LEDs in the code, the LEDs from 12> are first delayed, and then the whole "stripe" get messed up. They are sort of ramdomly switching between fading very smooth and not fading at all. I´ve connected everything exactly like this scheme: arduino - TLC 5940 PWM driver blank input and pull-up resistor - Electrical Engineering Stack Exchange
Is there something wrong with my code? Can you help me out here?
Note: The code below is for 16 LEDs, not the hole stripe of 30.
#include "Tlc5940.h"
#include "tlc_fades.h"
TLC_CHANNEL_TYPE channel;
void setup()
{
Tlc.init();
}
void loop()
{
if (tlc_fadeBufferSize < TLC_FADE_BUFFER_LENGTH - 2) {
if (!tlc_isFading(0)){
uint16_t duration = 4900 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(0, 50, maxValue, startMillis, endMillis );
tlc_addFade(0, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(1)){
uint16_t duration = 4700 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(1, 50, maxValue, startMillis, endMillis );
tlc_addFade(1, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(2)){
uint16_t duration = 4800 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(2, 50, maxValue, startMillis, endMillis );
tlc_addFade(2, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(3)){
uint16_t duration = 4500 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(3, 50, maxValue, startMillis, endMillis );
tlc_addFade(3, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(4)){
uint16_t duration = 4100 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(4, 50, maxValue, startMillis, endMillis );
tlc_addFade(4, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(5)){
uint16_t duration = 4200 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(5, 50, maxValue, startMillis, endMillis );
tlc_addFade(5, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(6)){
uint16_t duration = 4300 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(6, 50, maxValue, startMillis, endMillis );
tlc_addFade(6, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(7)){
uint16_t duration = 4400 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(7, 50, maxValue, startMillis, endMillis );
tlc_addFade(7, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(8)){
uint16_t duration = 4600 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(8, 50, maxValue, startMillis, endMillis );
tlc_addFade(8, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(9)){
uint16_t duration = 5000 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(9, 50, maxValue, startMillis, endMillis );
tlc_addFade(9, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(10)){
uint16_t duration = 5100 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(10, 50, maxValue, startMillis, endMillis );
tlc_addFade(10, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(11)){
uint16_t duration = 4700 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(11, 50, maxValue, startMillis, endMillis );
tlc_addFade(11, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(12)){
uint16_t duration = 4800 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(12, 50, maxValue, startMillis, endMillis );
tlc_addFade(12, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(13)){
uint16_t duration = 4500 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(13, 50, maxValue, startMillis, endMillis );
tlc_addFade(13, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(14)){
uint16_t duration = 4700 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(14, 50, maxValue, startMillis, endMillis );
tlc_addFade(14, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(15)){
uint16_t duration = 4800 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(15, 50, maxValue, startMillis, endMillis );
tlc_addFade(15, maxValue, 50, endMillis, endMillis + duration);}
if (!tlc_isFading(16)){
uint16_t duration = 4500 - (analogRead(0) * 2);
int maxValue = 1000;
uint32_t startMillis = millis();
uint32_t endMillis = startMillis + duration;
tlc_addFade(16, 50, maxValue, startMillis, endMillis );
tlc_addFade(16, maxValue, 50, endMillis, endMillis + duration);}
if (channel++ == NUM_TLCS * 16) {
channel = 0;
}
}
tlc_updateFades();
}