Quien me puede explicar el shift register

Tengo dificultad al intentar aprender el shift register, estoy mirando tutoriales en youtube, páginas, aunque en una me haya enterado un poco, todavia no termino de entender, con el planteamiento de que usare 8 leds con el 74hc595, ademas de que con cada pata, quiero manejar un led.

En Google hay infinitos manuales sobre el tema, pero este en concreto me parece (personalmente) muy didactico.

Manual

Tienes razon XD, al buscar me salio esto que es lo que no lo entiendo

//Pines del 74hc595
int pinDatos = 8;
int pinLatch = 9;
int pinReloj = 10;

//Variable de los datos
byte datos = 0;
void setup() {
  // put your setup code here, to run once:
  pinMode(pinDatos, OUTPUT);
  pinMode(pinLatch, OUTPUT);
  pinMode(pinReloj, OUTPUT);
}
//Para enviar datos a los pines que tu quieras
void shiftWrite(int desiredPin, boolean desiredState){
  //Para enviar bits individualmente
  bitWrite(datos, desiredPin, desiredState);
  /*Una vez que se han enviado los datos al shift register, el shiftOut(),
    hace el trabajo de manipular data y los clock pin para mover los datos
    dentro del shift register*/
    shiftOut(pinDatos, pinReloj, MSBFIRST, datos);
    /*Y una vez que algun dato o datos esta dentro del shift, solo queda
    manipular las salidas, que activaran los LEDs, con el pinlatch se
    se activa la transicion de HIGH-LOW*/
    digitalWrite(pinLatch, HIGH);
    digitalWrite(pinLatch, LOW);
}
void PoquitoAPoquito(){
  int leds;
  int delayTiempo = 50;
  for(leds = 0; leds <= 7; leds++){
    shiftWrite(leds, HIGH);
    delay(delayTiempo);
  }
  for(leds = 7; leds >= 0; leds--){
    shiftWrite(leds, LOW);
    delay(delayTiempo);
  }
  delay(10);
}
void randomLED()
{
  byte leds;
  int delayTime = 100;
 
  
  leds = random(8);  
  delay(1000);
  shiftWrite(leds, HIGH);  
  delay(delayTime);   
  shiftWrite(leds, LOW); 
}
void loop() {
  // Diseña los shows de leds
  randomLED();
}

En el randomLED(), se vuelvem loco, y le tengo puesto hay 2 delay, pero en el de PoquitoAPoquito(), ese si que va bien, que puedo hacer.

Aunque no conozco en detalle el 74hc595, creo que hay un error de concepto en la función Random.
Quieres crear algo aleatorio sobre la variable leds, cuando en realidad estos son fijos (8) y lo aleatorio debería ser sobre la salida HIGH o LOW. Es decir asirnar a cada leds un valor con Random(1) (alto o bajo)

Espero sea eso el problema.

Ya viste este video ?

Su utilidad ?
Supongamos que quieres hacer un reloj por lo que necesitas usar 6 display 7 segmentos 2 para horas, 2 para minutos y 2 para los segundos.

Para manejar cada digito requieres de 7 salidas asi que 8x7 = 56 salidas. En Arduino UNO imposible ?

Falso, solo se requiere usar 3 pines de Arduino y 7 IC 74x595.

Quieres ayuda con el codigo ?

blog Programar facil