O CI usado e um 74HC595 um registrador de deslocamento (Shift Register).

Código completo:
int latchPin = 9; // 12
int clockPin = 10; // PIN 11
int dataPin = 8; // é o pin 14 do 7HC595
byte vetor [] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
String txt = "";
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == ";") {
toggle(txt.toInt());
updateShift();
txt = "";
} else {
txt.concat(c);
}
}
}
/*
POSIÇÃO vai de 1-8
*/
void toggle(int posicao) {
vetor[posicao - 1] == 1 ? vetor[posicao - 1] = 0 : vetor[posicao - 1] = 1;
}
void updateShift() {
Serial.print("BINARIO: ");
for (int j = 1; j <= 2; j++) {
digitalWrite(latchPin, LOW); // baixa o portao para montar o BYTE
for (int i = 0; i <= 7; i++) {
digitalWrite(clockPin, LOW); // Avisa o Clock que vai ser escrito um BIT
int posicao = i;
j == 2 ? posicao = i + 8 : posicao = i;
digitalWrite(dataPin, vetor[posicao]); // Escreve o bit (BINARIO)
Serial.print(vetor[posicao]);
Serial.print("-");
digitalWrite(clockPin, HIGH); // Avisa o Clock que foi escrito um BIT
}
digitalWrite(latchPin, HIGH); // Avisa o Portão que terminamos de montar o BYTE, e ele já manda para o Shift
}
Serial.println("");
}


