display 7 segmentos 4 digitos

Muy buenas tardes, soy totalmente nuevo en este mundo, y ahora con el Covid y estar encerrados en casa me compre mi primer Arduino Mega para aprender con mis hijas. Estamos haciendo un proyecto usando casi todos los sensores y modulos que vienen en el KIT, para hacer como un Escape Room haciendo distintas pruebas.
Queremos incorporar el display de 4 digitos y 7 segmentos, y hemos colocado 74hc595 para no ocupar tantos pines.
El caso es que queremos mostrar un numero distinto en cada display, como si fuera un codigo, pero no se como hacerlo, y leido los manuales de comandos de arduino y no se cual usar, hemos probado con "shiftOut" pero este me muestra el mismo numero en los 4 digitos.
La intencion es que en el display ponga 2345, pero solo consigo poner 2222, o 3333...

¿que comando puedo usar?

int latch=33;  //74HC595  
int clock=31; //74HC595  
int data=35;   //74HC595  

unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c
,0x39,0x5e,0x79,0x71,0x00};

void setup() {
    pinMode(latch,OUTPUT);
    pinMode(clock,OUTPUT);
    pinMode(data,OUTPUT);
}

void loop()
{  
    digitalWrite(latch,LOW);
    shiftOut(data,clock,MSBFIRST,table[2]);  /// CON ESTE COMANDO ME MUESTRA EL MISMO NUMERO EN LOS 4 DISPLAYS
    digitalWrite(latch,HIGH);
    delay(500);

    digitalWrite(latch,LOW);
    shiftOut(data,clock,MSBFIRST,table[3]);  /// CON ESTE COMANDO ME MUESTRA EL MISMO NUMERO EN LOS 4 DISPLAYS
    digitalWrite(latch,HIGH);
    delay(500);
   
}

Hay varios temas similares en el foro que en un momento te indicaré para que te sirvan de ayuda.

Basicamente se usa una rutina que es llamada para que presente el número deseado en la ubicación asignada.

Acá tienes uno de los tantos temas similares que encuentras buscando en la LUPA (arriba derecha) buscando 74hc595

Controlar varios display con 74hc595

Muchas gracias por contestar, y perdon por ser tan novato, he visto y leido lo que me has indicado pero sigo sin ser capaz de hacer que muestre los digitos que yo quiero en cada display y no todos a la vez.
no soy capaz.

A ver si esto funciona? Adaptado de este link

// Demonstration code for 74HC595 16 bit output and 2x7 segment displays

int RCLKPin     = 33; // pin 12 on the 74hc595 latch - nSS
int SRCLKPin    = 31; // pin 11 on the 74hc595 shift register clock - SCK
int SERPin      = 35; // pin 14 on the 74hc595 data - MOSI
unsigned long d;   // Data to be sent to the shift reg.
int dir,num;       // Direction of walking 1, output number.
char buf[12];      // General purpose buffer.

// Define an array to translate number to 7segment
char segment[10] = { // segment bit pos: dp g f e d c b a
  0x3f, // zero
  0x06, // one
  0x5b, // two
  0x4f, // three
  0x66, // four
  0x6d, // five
  0x7c, // six
  0x07, // seven
  0x7f, // eight
  0x67  // nine
};

void setup() {
  Serial.begin(9600);          // start serial port (debug).

  pinMode(RCLKPin, OUTPUT);    // Set 595 control PINs to output.
  pinMode(SRCLKPin, OUTPUT);
  pinMode(SERPin, OUTPUT);

  Serial.println("74HC595 Demo 4xchips for 16 bit register and 2x7seg.");

  d = 1;
  num = 0;
}

void loop() {
unsigned char lnum,rnum;

    if (num++>99) 
        num=0;
    lnum = num / 10;
    rnum = num % 10;

    digitalWrite(RCLKPin, LOW);
    shiftOut(SERPin, SRCLKPin, MSBFIRST, segment[lnum]);
    shiftOut(SERPin, SRCLKPin, MSBFIRST, segment[rnum]);
    shiftOut(SERPin, SRCLKPin, MSBFIRST, (0xff00 & d)>>8);
    shiftOut(SERPin, SRCLKPin, MSBFIRST, 0x00ff & d);
    digitalWrite(RCLKPin, HIGH);

    Serial.println(ltoa(d,buf,16));

    if (!dir) 
        d<<=1; 
    else 
        d>>=1; // Shift

    if (d&0x8000) 
        dir=1;           // Set direction.
    if (d&0x1) 
        dir=0;

    delay(200);
}