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(""); }