#include <Arduino.h>
#include <SPI.h>
#define LATCH_PIN 5 // STCP (Latch clock) pin on 74HC595
#define DATA_PIN 23 // DS (MOSI) pin on 74HC595 (MOSI)
#define CLOCK_PIN 18 // SHCP (SCK) pin on 74HC595 (SCK)
void updateShiftRegister(byte data);
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
pinMode(LATCH_PIN, OUTPUT);
// Initialize SPI with the correct pins
SPI.begin(CLOCK_PIN, -1, DATA_PIN, -1); // Initialize SPI with SCK and MOSI
// Turn all LEDs off initially
updateShiftRegister(0x00); // All LEDs OFF
}
byte data1 = 0xC3;
byte data2 = 0x3C;
byte data3 = 0xAA;
void loop() {
// // Pattern 1: Turn LEDs on one by one
// byte data = 0x00; // All LEDs initially OFF
// for (int i = 0; i < 8; i++) {
// data |= 1 << i; // Turn on one LED at a time
// updateShiftRegister(data);
// delay(200); // 200ms delay between LEDs
// }
// delay(1000);
// // Pattern 2: Turn LEDs off one by one
// byte currentState = 0xFF; // All LEDs initially ON
// for (int i = 0; i < 8; i++) {
// currentState &= ~(1 << i); // Turn off one LED at a time
// updateShiftRegister(currentState);
// delay(200); // 200ms delay between LEDs
// }
// delay(1000);
// Pattern 3: 50% ON, 50% OFF (First Half ON, Second Half OFF)
// Send the byte of data via SPI
SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0)); // Configure SPI speed
SPI.transfer(data1);
// SPI.transfer(data2);
// SPI.transfer(data3);
SPI.endTransaction();
// Latch high to set the output of the shift register
digitalWrite(LATCH_PIN, LOW);
digitalWrite(LATCH_PIN, HIGH);
data1 ^= 0xFF;
data2 ^= 0xFF;
data3 ^= 0xFF;
delay(500); // 500ms delay
}
// Function to update the 74HC595 shift register using SPI
void updateShiftRegister(byte data) {
// Latch low to begin transmitting data
digitalWrite(LATCH_PIN, LOW);
// Send the byte of data via SPI
SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0)); // Configure SPI speed
SPI.transfer(data);
SPI.endTransaction();
// Latch high to set the output of the shift register
digitalWrite(LATCH_PIN, HIGH);
}