Olá @dmlugao, usar esses deslocadores de bits é opção sua para aprender? Pergunto pois o mais aconselhável é utilizar um driver de LED. O mais usual é o MAX7219, inclusive já tem conjuntos completos da matriz de LED’s junto com este driver, já que ele é o mais comum neste tipo de tarefa, como este, por exemplo e muitos tutoriais de fácil entendimento, nesse tutorial, você já terá uma idéia de como criar o seu cubo, é só prestar atenção no chaining.
Segunda coisa é sobre o seu projeto: Os deslocadores estão corretamente conectados? Como desmonstrado no Playground?
Por fim, vamos dar uma olhada no seu código… Qual o sentido de declarar a pinagem do deslocador, se você está colocando o número dos pinos literalmente? Ora, se você declara que:
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
Então este código:
void loop () {
digitalWrite(5, LOW);
shiftOut(4, 6, LSBFIRST, 0b00000011);
digitalWrite(5, HIGH);
delay (500);
}
Deveria ser escrito da seguinte forma:
void loop () {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 0b00000011);
digitalWrite(latchPin, HIGH);
delay (500);
}
Caso contrário você está apenas fazendo o programa aumentar de tamanho, tomando memória desnecessariamente, por sorte, acho que os pinos são OUTPUT por padrão, caso contrário, essa sintaxe causaria mais problemas.
Sobre a função de shiftOut, em geral, você não precisa declarar a ordem dos bits, creio que, o LSB (Least Significant Bit) é o padrão da função.
Se o teu código está funcionando corretamente, apesar de precisar de otimização, percebo que o problema é óbvio: Uma matriz é composta por linhas e colunas, não há em teu código, um deslocador da linha/coluna, ele escreve sempre na linha/coluna 0, acendendo os dois últimos LED’s (duas linhas/colunas), ou seja, basicamente você está fazendo uso de apenas 1 deslocador de 8 bits, que escreve de 0 a 255 (0x0 a 0xFF/0b0 a 0b11111111), o outro, que deveria deslocar a linha, você não está utilizado, logo, o dado que você deveria passar é um valor de 16 bit, onde os primeiros 8 bits devem deslocar a linha/coluna e os 8 bits restantes devem deslocar a linha/coluna (dependendo da configuração do projeto).