Merhere TLC59116 in Funktion verwalten

Hi,

Ich habe 4 TLC59116 LED Treiber, die an einem I2C Bus hängen. Sie werden wie folgt eingerichtet:

#include <TLC59116.h>

TLC59116 board1(0);
TLC59116 board2(1);
TLC59116 board3(2);
TLC59116 board4(3);

Im Setup so:

board1.begin();
  board2.begin();
  board3.begin();
  board4.begin();

in der loop möchte ich dann aber verschiedene Kombinationen an die TLC schicken:

void loop() {
  kombinationa(1);
  delay(2000);
  kombinationb(2);
  delay(2000);
  kombinationc(3);
  delay(2000);
  kombinationd(4);
  delay(2000);
}

Dazu gibt es dann diese Funktinen:

void kombinationa(byte stelle)

momentan muss ich aber die Stelle übergeben und dann mit einer If funktion filtern:

void kombinationa(byte stelle) {
  if (stelle == 1) {
    board1.analogWrite(0, 255);
    board1.analogWrite(1, 255);
    board1.analogWrite(2, 255);
    board1.analogWrite(3, 0);
    board1.analogWrite(4, 0);
    board1.analogWrite(5, 255);
    board1.analogWrite(6, 0);
    board1.analogWrite(7, 0);
    board1.analogWrite(8, 255);
    board1.analogWrite(9, 255);
    board1.analogWrite(10, 255);
    board1.analogWrite(11, 0);
    board1.analogWrite(12, 255);
    board1.analogWrite(13, 0);
    board1.analogWrite(14, 255);
    board1.analogWrite(15, 255);
  }
  if (stelle == 2) {
    board2.analogWrite(0, 255);
    board2.analogWrite(1, 255);
    board2.analogWrite(2, 255);
    board2.analogWrite(3, 0);
    board2.analogWrite(4, 0);
    board2.analogWrite(5, 255);
    board2.analogWrite(6, 0);
    board2.analogWrite(7, 0);
    board2.analogWrite(8, 255);
    board2.analogWrite(9, 255);
    board2.analogWrite(10, 255);
    board2.analogWrite(11, 0);
    board2.analogWrite(12, 255);
    board2.analogWrite(13, 0);
    board2.analogWrite(14, 255);
    board2.analogWrite(15, 255);
  }
  if (stelle == 3) {
    board3.analogWrite(0, 255);
    board3.analogWrite(1, 255);
    board3.analogWrite(2, 255);
    board3.analogWrite(3, 0);
    board3.analogWrite(4, 0);
    board3.analogWrite(5, 255);
    board3.analogWrite(6, 0);
    board3.analogWrite(7, 0);
    board3.analogWrite(8, 255);
    board3.analogWrite(9, 255);
    board3.analogWrite(10, 255);
    board3.analogWrite(11, 0);
    board3.analogWrite(12, 255);
    board3.analogWrite(13, 0);
    board3.analogWrite(14, 255);
    board3.analogWrite(15, 255);
  }
  if (stelle == 4) {
    board4.analogWrite(0, 255);
    board4.analogWrite(1, 255);
    board4.analogWrite(2, 255);
    board4.analogWrite(3, 0);
    board4.analogWrite(4, 0);
    board4.analogWrite(5, 255);
    board4.analogWrite(6, 0);
    board4.analogWrite(7, 0);
    board4.analogWrite(8, 255);
    board4.analogWrite(9, 255);
    board4.analogWrite(10, 255);
    board4.analogWrite(11, 0);
    board4.analogWrite(12, 255);
    board4.analogWrite(13, 0);
    board4.analogWrite(14, 255);
    board4.analogWrite(15, 255);
  }
}

Das geht doch bestimmt viel schöner oder?

Es gibt 50 verschiedene Kombinationen, das würden 4500 Zeilen Code bedeuten :frowning:

nun zur Frage:
Wie kann ich das BoardX direkt übergeben und dann die Kombination nur einmal anlegen?

also quasi sowas:

void loop() {
  kombinationa(board1);
  delay(2000);
  kombinationb(board2);
  delay(2000);
  kombinationc(board3);
  delay(2000);
  kombinationd(board4);
  delay(2000);
}
void kombinationa(byte stelle) {
    stelle.analogWrite(0, 255);
    stelle.analogWrite(1, 255);
    stelle.analogWrite(2, 255);
    stelle.analogWrite(3, 0);
    stelle.analogWrite(4, 0);
    stelle.analogWrite(5, 255);
    stelle.analogWrite(6, 0);
    stelle.analogWrite(7, 0);
    stelle.analogWrite(8, 255);
    stelle.analogWrite(9, 255);
    stelle.analogWrite(10, 255);
    stelle.analogWrite(11, 0);
    stelle.analogWrite(12, 255);
    stelle.analogWrite(13, 0);
    stelle.analogWrite(14, 255);
    stelle.analogWrite(15, 255);
  }

Hi

Indem Du Referenzen auf die Instanzen Deiner LED-Stripes erzeugst.

Oder Du legst den Kram direkt in einem Array ab, was in der Art:
TLC59116 board[]= {0,1,2,3};
const byte boardanz=sizeof(board)/sizeof(board[0]);

Dann solltest Du per board[x] (0...<boardanz) auf die Entsprechung zugreifen können.

MfG

Funktioniert mit dem Array, Tausend Dank :slight_smile: