La idea es enviar los bits en el orden en que los LED están conectados al registro de desplazamiento, mientras se cambia el pin del reloj para la sincronización.
Almacena un byte para cada uno de los 8 LED (o menos) que desea controlar. Cuando desee cambiar un LED, cambie el bit apropiado y envíe los bits al registro de desplazamiento mediante la función shiftOut.
En un Arduino, esto es parte de la biblioteca, de lo contrario tienes que hacerlo manualmente.
En este arduino shift out en C nativo pregunta usted puede encontrar el Código, aquí está el fragmento:
void shiftOut(GPIO dataPin, GPIO clockPin, bool MSBFIRST, uint8_t command)
{
for (int i = 0; i < 8; i++)
{
bool output = false;
if (MSBFIRST)
{
output = command & 0b10000000;
command = command << 1;
}
else
{
output = command & 0b00000001;
command = command >> 1;
}
writePin(dataPin, output);
writePin(clockPin, true);
sleep(1)
writePin(clockPin, false);
sleep(1)
}
}
En caso de que quiera controlar más de 8 LED, puede almacenar 4 bytes (uint32_t) y cambiar el tipo de argumento de comando de uint8_t a uint32_t y el bucle for para que se ejecute hasta 32. Por supuesto, los registros de desplazamiento deben estar encadenados (máx. 4 para máx. 32 LED).