По отдельности всё работает, объединяю код и работает только tlc5940. Нашёл, что может быть проблема в библиотеке tlc5940 - не позволяют подключать к arduino одновременно с драйвером другие модули, использующие интерфейс SPI. Заменил интерфейс драйвера на «bitbang», ничего не изменилось.
Код:
#include "Tlc5940.h";
#include "LedControl.h" // need the library
LedControl lc=LedControl(2,6,5,1); //
#define DELAY 45
unsigned long timer;
int row = 0;
byte st = 0;
int col = 0;
void setup()
{
// the zero refers to the MAX7219 number, it is zero for 1 chip
lc.shutdown(0,false);// turn off power saving, enables display
lc.setIntensity(0,2);// sets brightness (0~15 possible values)
lc.clearDisplay(0);// clear screen
//Инициализируем драйвер
Tlc.init();
}
void loop()
{
if (millis()-timer > DELAY)
{
timer = millis();
lc.setLed(0,1, row-2, st); // turns on/off LED at col, row
lc.setLed(0,3, row, st); // turns on/off LED at col, row
lc.setLed(0,5, row-1, st); // turns on/off LED at col, row
lc.setLed(0,col, 0, st); // turns on/off LED at col, row
lc.setLed(0,col, 1, st); // turns on/off LED at col, row
lc.setLed(0,col-1, 2, st); // turns on/off LED at col, row
lc.setLed(0,col-2, 3, st); // turns on/off LED at col, row
lc.setLed(0,col, 4, st); // turns on/off LED at col, row
lc.setLed(0,col-1, 5, st); // turns on/off LED at col, row
/* lc.setLed(0,2, row-2, st); // turns on/off LED at col, row
lc.setLed(0,0, row-2, st); // turns on/off LED at col, row */
if ((++row > 6)&&(++col>6)) {row=0;col=0; st^=1;}
}
int direction = 1;
//Обратите внимание, на использование переменной NUM_TLCS.
//Если умножить её на 16, то мы получим число выводов
//На всех драйверах подключённых цепочкой
//Таким образом, OUT0 второго драйвера будет 16 каналом
//OUT0 третьего будет 32 каналом и т.д.
for (int channel = 0; channel < NUM_TLCS*16; channel += direction) {
//Гасим выводы:
Tlc.clear();
//Устанавливаем яркость в зависимости от направления волны
if (channel == 0) {
direction = 1;
} else {
Tlc.set(channel - 1, 1000);
}
Tlc.set(channel, 4095);
if (channel != NUM_TLCS * 16 - 1) {
Tlc.set(channel + 1, 1000);
} else {
direction = -1;
}
//Применяем изменения
Tlc.update();
int OldTime=millis();
while((millis()-OldTime)<100);
}
}