final code, reads 9 registers:
const int dataPin = 12; /* Q7 */
const int clockPin = 13; /* CP */
const int latchPin = 14; /* PL */
const int bits = 72; //8x number of registers e.g 2 registers = 16
void setup() {
Serial.begin(115200);
pinMode(dataPin, INPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
}
String ios = ""; //in my case, strings fit better. recommend using array
void loop() {
// Step 1: Sample
digitalWrite(latchPin, LOW);
digitalWrite(latchPin, HIGH);
// Step 2: Shift
ios = "";
for (int i = 0; i < bits; i++) {
int bit = digitalRead(dataPin);
if (bit == HIGH) {
ios.concat("1");
} else {
ios.concat("0");
}
digitalWrite(clockPin, HIGH); // Shift out the next bit
digitalWrite(clockPin, LOW);
}
for(int a = 8; a < bits+8; a = a+8){
Serial.println("register " + String(a/8) + ": " + ios.substring(a-8,a));
}
Serial.println();
delay(1000);
}