#include <SPI.h>
int latchPin1 = 12; // (11) ST_CP [RCK] on 74HC595
int clockPin1 = 11; // (9) SH_CP [SCK] on 74HC595
int dataPin1 = 13; // (12) DS [S1] on 74HC595
int latchPin2 = 9; // (11) ST_CP [RCK] on 74HC595
int clockPin2 = 8; // (9) SH_CP [SCK] on 74HC595
int dataPin2 = 10; // (12) DS [S1] on 74HC595
int latchPin3 = 6; // (11) ST_CP [RCK] on 74HC595
int clockPin3 = 5; // (9) SH_CP [SCK] on 74HC595
int dataPin3 = 7; // (12) DS [S1] on 74HC595
int latchPin4 = 3; // (11) ST_CP [RCK] on 74HC595
int clockPin4 = 2; // (9) SH_CP [SCK] on 74HC595
int dataPin4 = 4; // (12) DS [S1] on 74HC595
byte ledData[4] = {0}; // Array to store data for each row (4 bytes)
void setup() {
// Set data, clock, and latch pins as outputs
pinMode(dataPin1, OUTPUT);
pinMode(clockPin1, OUTPUT);
pinMode(latchPin1, OUTPUT);
pinMode(dataPin2, OUTPUT);
pinMode(clockPin2, OUTPUT);
pinMode(latchPin2, OUTPUT);
pinMode(dataPin3, OUTPUT);
pinMode(clockPin3, OUTPUT);
pinMode(latchPin3, OUTPUT);
pinMode(dataPin4, OUTPUT);
pinMode(clockPin4, OUTPUT);
pinMode(latchPin4, OUTPUT);
}
void loop() {
// Turn on specific LEDs in each row
ledData[1] = 0b00100110;
ledData[2] = 0b11100010;
ledData[3] = 0b01010101;
ledData[4] = 0b01000111;
// Send data to all shift registers
for (int i = 0; i < 4; i++) {
shiftOut(ledData[1]);
shiftOut2(ledData[2]);
shiftOut3(ledData[3]);
shiftOut4(ledData[4]);
}
digitalWrite(latchPin1, HIGH);
digitalWrite(latchPin2, HIGH);
digitalWrite(latchPin3, HIGH);
digitalWrite(latchPin4, HIGH);
// Delay (optional, adjust as desired)
}
void shiftOut(byte data) {
digitalWrite(latchPin1, LOW);
for (int i=7; i>=0; i--) {
digitalWrite(dataPin1, bitRead(data, i));
digitalWrite(clockPin1, HIGH);
digitalWrite(clockPin1, LOW);
}
digitalWrite(latchPin1, HIGH);
}
void shiftOut2(byte data2) {
digitalWrite(latchPin2, LOW);
for (int i=7; i>=0; i--) {
digitalWrite(dataPin2, bitRead(data2, i));
digitalWrite(clockPin2, HIGH);
digitalWrite(clockPin2, LOW);
}
digitalWrite(latchPin2, HIGH);
}
void shiftOut3(byte data3) {
digitalWrite(latchPin3, LOW);
for (int i=7; i>=0; i--) {
digitalWrite(dataPin3, bitRead(data3, i));
digitalWrite(clockPin3, HIGH);
digitalWrite(clockPin3, LOW);
}
digitalWrite(latchPin3, HIGH);
}
void shiftOut4(byte data4) {
digitalWrite(latchPin4, LOW);
for (int i=7; i>=0; i--) {
digitalWrite(dataPin4, bitRead(data4, i));
digitalWrite(clockPin4, HIGH);
digitalWrite(clockPin4, LOW);
}
digitalWrite(latchPin4, HIGH);
}