//Constants
#define number_of_74hc595s 3
#define numOfRegisterPins number_of_74hc595s * 8
#define SER_Pin 2
#define RCLK_Pin 3
#define SRCLK_Pin 4
//Variables
boolean registers [numOfRegisterPins] ={0, 0, 0};
void setup(){
//Init Serial USB
Serial.begin(115200);
Serial.println(F("Initialize System"));
//Init register
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
digitalWrite(RCLK_Pin, HIGH);
delay(10);
digitalWrite(RCLK_Pin, LOW);
}
void loop(){
writeGrpled();
}
void clearRegisters(){/* function clearRegisters */
//// Clear registers variables
for(int i = numOfRegisterPins-1; i >= 0; i--){
registers[i] = LOW;
}}
void writeRegisters(){/* function writeRegisters */
//// Write register after being set
digitalWrite(RCLK_Pin, LOW);
for(int i = numOfRegisterPins-1; i >= 0; i--){
digitalWrite(SRCLK_Pin, LOW);
int val = registers[i];
digitalWrite(SER_Pin, val);
digitalWrite(SRCLK_Pin, HIGH);
}
}
void setRegisterPin(int index,int value){/* function setRegisterPin */
////Set register variable to HIGH or LOW
registers[index] = value;
}
void writeGrpled(){/* function writeGrpled */
//// blink leds
for(int i = numOfRegisterPins-1; i >= 0; i--){
Serial.print(F("LED "));Serial.print(i);Serial.println(F(" HIGH"));
setRegisterPin(i, HIGH);
writeRegisters();
delay(10);
digitalWrite(RCLK_Pin, HIGH);
Serial.print(F("LED "));Serial.print(i);Serial.println(F(" LOW"));
setRegisterPin(i, LOW);
writeRegisters();
delay(100);
}
}