Controlling 4 daisy chained 595 chips

This code is straight c/p from the tutorial, except that I've added 2 more lines since I'm using 4 instead of 2 shift registers and there's my own array.

Notice: I only have LEDs on 1st and 2nd shift register at the moment. 8 on the first and 5 on 2nd.

//**************************************************************//
//  Name    : shiftOutCode, Dual Binary Counters                 //
//  Author  : Carlyn Maw, Tom Igoe                               //
//  Date    : 25 Oct, 2006                                       //
//  Version : 1.0                                                //
//  Notes   : Code for using a 74HC595 Shift Register            //
//          : to count from 0 to 255                             //
//**************************************************************//

//Pin connected to ST_CP of 74HC595
int latchPin = 3;
//Pin connected to SH_CP of 74HC595
int clockPin = 4;
////Pin connected to DS of 74HC595
int dataPin = 2;

int array[] = {1,2,4,8,16,32,64,128,255};



void setup() {
  //Start Serial for debuging purposes	
  Serial.begin(9600);
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);

}

void loop() {
  //count up routine
  for (int j = 0; j < 9; j++) {
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 0); 
    shiftOut(dataPin, clockPin, 0); 
    shiftOut(dataPin, clockPin, array[j]); 
    shiftOut(dataPin, clockPin, array[j]);
    //return the latch pin high to signal chip that it 
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(1000);
  }
}

void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first, 
  //on the rising edge of the clock,
  //clock idles low

//internal function setup
  int i=0;
s  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

 //clear everything out just in case to
 //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

  //for each bit in the byte myDataOut?
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights. 
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result 
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000 
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {	
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin  
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}

Now, if I write this:

    shiftOut(dataPin, clockPin, 0); 
    shiftOut(dataPin, clockPin, 0); 
    shiftOut(dataPin, clockPin, 0); 
    shiftOut(dataPin, clockPin, array[j]);

First shift register (the one which has clock pin, latch and data pin connected to Arduino) works perfectly. All 8 LEDs turn on as expected EXCEPT for this:

array[7] - last LED on first SR turns on
array[8] (255) - every LED on first SR turns on
array[0] (again) - every LED on both SR turns on
array[1] - second LED on first SR turns on

then it works all fine until array[0] comes again.
Notice: when I upload the sketch and the loop starts, array[0] turns only first LED on first SR until the loop starts again, then array[0] turns on every LED on both SR.

If I write this code

    shiftOut(dataPin, clockPin, 0); 
    shiftOut(dataPin, clockPin, 0); 
    shiftOut(dataPin, clockPin, array[j]); 
    shiftOut(dataPin, clockPin, 0);

LEDs on 2nd SR turn on and off repeatedly (not one by one but all).
I'm running out of ideas here.

From http://arduino.cc/en/Reference/ShiftOut:

Syntax
shiftOut(dataPin, clockPin, bitOrder, value)

YOU HAVE LEFT OUT 'bitOrder'.

Note
The dataPin and clockPin must already be configured as outputs by a call to pinMode().

YOU HAVE NOT DONE THAT.

No need to yell. Anyways I've fixed and it's behaving exactly the same.

//**************************************************************//
//  Name    : shiftOutCode, Dual Binary Counters                 //
//  Author  : Carlyn Maw, Tom Igoe                               //
//  Date    : 25 Oct, 2006                                       //
//  Version : 1.0                                                //
//  Notes   : Code for using a 74HC595 Shift Register            //
//          : to count from 0 to 255                             //
//**************************************************************//

//Pin connected to ST_CP of 74HC595
int latchPin = 3;
//Pin connected to SH_CP of 74HC595
int clockPin = 4;
////Pin connected to DS of 74HC595
int dataPin = 2;

int array[] = {1,2,4,8,16,32,64,128,255};



void setup() {
  //Start Serial for debuging purposes	
  Serial.begin(9600);
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

}

void loop() {
  //count up routine
  for (int j = 0; j < 9; j++) {
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //count up on GREEN LEDs
    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, array[j]);
    //return the latch pin high to signal chip that it 
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(1000);
  }
}

void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first, 
  //on the rising edge of the clock,
  //clock idles low

//internal function setup
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

 //clear everything out just in case to
 //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

  //for each bit in the byte myDataOut?
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights. 
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result 
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000 
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {	
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin  
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}

Try removing the shiftOut function from your code an using the shiftOut() function from the Arduino core. Perhaps back in 2006 when that example code ws written the Arduino library didn't include shiftOut().

Are you using the schematic from this tutorial? http://arduino.cc/en/Tutorial/ShiftOut

Removed shiftOut function. New results:

    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, array[j]);

Working as expected. No LEDs are lighted up on 2nd register.

    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, 0); 
    shiftOut(dataPin, clockPin, MSBFIRST, array[j]); 
    shiftOut(dataPin, clockPin, MSBFIRST, 0);

Nothing is lighted up.

And yes, schematics is same except that I've added capacitors between GND and +5 on each chip.

kustom:

    shiftOut(dataPin, clockPin, MSBFIRST, 0); 

shiftOut(dataPin, clockPin, MSBFIRST, 0);
   shiftOut(dataPin, clockPin, MSBFIRST, array[j]);
   shiftOut(dataPin, clockPin, MSBFIRST, 0);




Nothing is lighted up.

My best guess would be a wiring error.

This is how it looks:

I tried code from this site and guess what - it works.

http://bildr.org/2011/02/74hc595/

Or you can try this:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1278251011/all