chtěl bych poprosit o pomoc s vysvětlením funkce kódu. Mám čtyři osmisegmentové číslicové displeje. Každý displej ovládá jeden TPIC6B595N - ty jsou zapojeny v sérii za sebou. Desku s displeji ovládám přes Arduino UNO, které mám v ruce poprvé v životě

Kód, který jsem našel na internetu a který mou desku s číslicovými displeji plnohodnotně ovládá, je následující:
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
int numOfRegisters = 4;
byte* registerState;
void setup() {
//Vytvoří pole (z počtu numOfRegisters všech TPIC6B595N) a každému přiřadí hodnotu 0
registerState = new byte[numOfRegisters];
for (size_t i = 0; i < numOfRegisters; i++) {
registerState = 0;
}
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (int i = 0; i < 32; i++){
for (int k = i; k < 32; k++){
regWrite(k, HIGH);
delay(200);
regWrite(k, LOW);
}
regWrite(i, HIGH);
}
}
void regWrite(int pin, bool state){
//Determines register
int reg = pin / 8;
//Determines pin for actual register
int actualPin = pin - (8 * reg);
//Begin session
digitalWrite(latchPin, LOW);
for (int i = 0; i < numOfRegisters; i++){
//Get actual states for register
byte* states = ®isterState;
//Update state
if (i == reg){
bitWrite(*states, actualPin, state);
}
//Write
shiftOut(dataPin, clockPin, MSBFIRST, *states);
}
//End session
digitalWrite(latchPin, HIGH);
}
Tučně označený kód je ta část kódu, kde přesně nevím, jaké informace respektive jaké hodnoty bitů se kam posílají.
byte* states = ®isterState; - tímto se vytvoří nějaké pole stavů jednotlivých TPIC6B595N
bitWrite(*states, actualPin, state); - tady se zapisují bity jednotlivých stavů TPIC6B595N - jak si zobrazím jednotlivé hodnoty pres Serial.print ?
shiftOut(dataPin, clockPin, MSBFIRST, *states); - a tady už nevím vůbec, co se posílá
Mohl by mi to někdo, prosím, detailně vysvětlit ?
Když totiž pro každou diodu napíšu např. toto:
bitWrite(states, 0, LOW);
bitWrite(states, 1, HIGH);
bitWrite(states, 2, HIGH);
bitWrite(states, 3, LOW);
.
.
bitWrite(states, 7, HIGH);
bitWrite(states, 8, LOW);
.
.
A pak to odešlu tímto:
//Write
shiftOut(dataPin, clockPin, MSBFIRST, states);
..tak se nastaví pouze první číslicový displej dle bitWrites pro diody 0-7 a zbylé tři displeje se nastaví dle toho prvního - tedy všechny displeje ukazují to samé...
Snad jsem to popsal srozumitelně. Předem díky za odpověď.
Dave