// https://forum.arduino.cc/t/max7219cng-or-74hc595-to-control-multiple-10-segment-led-bargraph/1264933
#define dataPin 2 // DS
#define clockPin 3 // SHCP
#define latchPin 4 // STCP
#define regPins 50
int pattern = 0b10101010;
bool registers[regPins];
bool state = false;
void setup() {
randomSeed(analogRead(A0));
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
clearRegisters();
writeRegisters();
}
void loop() { // un-comment the selected function
// toggle();
// randomize();
// patterns();
sequential();
// stacks();
}
//**************************************************
// display functions
//**************************************************
void patterns() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, pattern);
digitalWrite(latchPin, HIGH);
delay(500);
pattern = ~pattern; // Invert the pattern
}
void toggle() {
for (int i = 0; i < regPins; i++) {
if (!(i % 2)) {
setRegisterPin(i, state);
} else {
setRegisterPin(i, !state);
}
writeRegisters();
}
state = !state;
delay(500);
}
void randomize() {
int i = random(regPins);
setRegisterPin(i, HIGH);
writeRegisters();
delay(100);
setRegisterPin(i, LOW);
writeRegisters();
delay(200);
}
void sequential() {
for (int i = 0; i < regPins - 1; i++) {
// setRegisterPin(regPins, HIGH);
setRegisterPin(regPins - i, HIGH);
writeRegisters();
// setRegisterPin(regPins, LOW);
setRegisterPin(regPins - i, LOW);
writeRegisters();
delay(25);
}
}
void stacks() {
int j = random(5);
for (int i = 0; i < 10; i++) {
setRegisterPin(regPins - (j * 10 + i + 1), HIGH);
writeRegisters();
delay(25);
}
clearRegisters();
delay(50);
}
//**************************************************
// utility functions
//**************************************************
void clearRegisters() {
for (int i = 0; i < regPins; i++) {
registers[i] = LOW;
}
}
void setRegisterPin(int index, int value) { // set individual pins
registers[index] = value;
}
void writeRegisters() {
digitalWrite(latchPin, LOW);
for (int i = 0; i < regPins; i++) {
digitalWrite(clockPin, LOW);
digitalWrite(dataPin, registers[i]);
digitalWrite(clockPin, HIGH);
}
digitalWrite(latchPin, HIGH);
}