Sorry! i've attached the breadboard i'm using to test, and the board i've designed where i use the TIP112 with the solenoids.
the only differences from the breadboard and the PCB are the pull downs(10k) on pin 8, 11 & 12, and pin 4 to OE with also a pull down.
Here's the code i'm testing with, the one that takes almost a second to reset al the outputs of the 595:
#include <MultiShiftRegister.h>
/*
Shift Register Example
for 74HC595 shift register
This sketch turns reads serial input and uses it to set the pins
of a 74HC595 shift register.
Hardware:
* 74HC595 shift register attached to pins 8, 12, and 11 of the Arduino,
as detailed below.
* LEDs attached to each of the outputs of the shift register.
Created 22 May 2009
Created 23 Mar 2010
by Tom Igoe
*/
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 8;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 12;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 11;
MultiShiftRegister msr (2 , latchPin, clockPin, dataPin);
void setup() {
Serial.begin(9600);
Serial.println("start");
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(4, OUTPUT);
for(int a = 0;a<9;a++){
msr.clear(a);
msr.shift();
}
digitalWrite(4,LOW);
}
void loop() {
if (Serial.available() > 0) {
String input = Serial.readString();
input.trim();
int bitToSet = 99;
if(input.equals("_0")){
bitToSet = 0;
}else if(input.equals("_1")){
bitToSet = 0;
}else if(input.equals("_2")){
bitToSet = 2;
}else if(input.equals("_3")){
bitToSet = 3;
}else if(input.equals("_4")){
bitToSet = 4;
}else if(input.equals("_5")){
bitToSet = 5;
}else if(input.equals("_6")){
bitToSet = 6;
}else if(input.equals("_7")){
bitToSet = 7;
}else if(input.equals("_8")){
bitToSet = 8;
}else if(input.equals("_9")){
bitToSet = 9;
}
if(bitToSet != 99){
msr.set(bitToSet);
msr.shift();
delay(2000);
msr.clear(bitToSet);
msr.shift();
}
}
}

