Shift register a 8 bit SN74HC595N (RISOLTO)

Saluti a tutti, in questi giorni di forzata inattività (a proposito mi auguro stiate tutti bene!) sto cercando d'imparare ad utilizzare dei SN74HC595N, che ho ricevuto diverso tempo fa, collegandoli "a cascata".

Nessun problema a collegarne 2, (ho seguito pedestramente quanto indicato in questo tutorial), i problemi sorgono a collegarne un terzo (e poi un quarto).

Nel "void writeRegister(unsigned int value)" ho variato la variabile (scusate il bisticcio!") da "int" a "long" in modo da avere non 16 ma 32 bit; ho inoltre aggiunto un'ulteriore riga agli "shiftOut" facendolo partire dal bit 16.

#define DATA_PIN 4
#define LATCH_PIN 3
#define CLOCK_PIN 2

void setup(){
  pinMode(DATA_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
}

void loop(){
  animation1(200);
}

void writeRegister(unsigned long value){
  digitalWrite(LATCH_PIN, LOW);
  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 16);
  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 8);
  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value);
  digitalWrite(LATCH_PIN, HIGH);
}

void animation1(unsigned long animationDelay){
  for(int i = 0; i < 24; i++){
    writeRegister(0x1 << i);
    delay(animationDelay);
  }
  for(int i = 0; i < 24; i++){
    writeRegister(0x8000000 >> i); //*** è qui l'errore? ***
    delay(animationDelay);
  }
}

Penso che l'errore sia dovuto alla mia non conoscenza dei numeri esadecimali; il mio ragionamento è stato:

se nel tutorial con 2 integrati si indica un 8 seguito da 3 zeri per 16 bit, ne occorrerà uno con 6 zeri per 32 bit.

Ragionamento sicuramente errato, ma non sono stato capace di trovare alcuna informazione per correggermi!!

Anticipatamente grazie per ogni indicazione/suggerimento vogliate darmi.

Saluti

Enrico

Ogni cifra esa rappresenta 4 bit, quindi 32 bit sono 8 cifre esa.

Poi per questo lavoro meglio usare variabili senza segno (unsigned).

Grazie.

Ogni cifra esa rappresenta 4 bit, quindi 32 bit sono 8 cifre esa.

Quindi "0x800000" E' la cifra corretta in quanto a me sono sufficienti 24 bit. E' comunque possibile utilizzare un valore di tipo binario e non esa?

Poi per questo lavoro meglio usare variabili senza segno (unsigned).

Già previsto.

Sto comunque "affogando" nei cavetti!! Domani monto tutto su una millefori.

Saluti