//Constants https://www.aranacorp.com/en/controlling-8-relays-with-esp32-and-shift-register/
//#define number_of_74hc595s 1
#define number_of_74hc595s 4
#define numOfRegisterPins number_of_74hc595s * 8
#define SER_Pin 15
#define RCLK_Pin 2
#define SRCLK_Pin 4
boolean registers [numOfRegisterPins];
void setup(){
Serial.begin(115200);
Serial.println(F("Initialize System"));
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
clearRegisters();
writeRegisters();
delay(500);
}
/*
1 = 2, 6
2 = 1, 2, 3, 4, 5
3 = 1, 2, 3, 5, 6
4 = 0, 2, 3, 6
5 = 0, 1, 3, 5, 6
6 = 0, 1, 3, 4, 5, 6
7 = 1, 2, 6
8 = 0, 1, 2, 3, 4, 5, 6
9 = 0, 1, 2, 3, 5, 6
0 = 0, 1, 2, 4, 5, 6*/
void loop(){
writeGrpRelay();
}
void clearRegisters(){
for(int i = numOfRegisterPins-1; i >= 0; i--){
registers[i] = LOW;
}
}
void writeRegisters(){
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);
}
digitalWrite(RCLK_Pin, HIGH);
}
void setRegisterPin(int index,int value){
registers[index] = value;
}
void writeGrpRelay(){
for(int i = numOfRegisterPins-1; i >= 0; i--){
Serial.print(F("Relay "));Serial.print(i);Serial.println(F(" HIGH"));
setRegisterPin(i, HIGH);
writeRegisters();
delay(200);
Serial.print(F("Relay "));Serial.print(i);Serial.println(F(" LOW"));
setRegisterPin(i, LOW);
writeRegisters();
delay(500);
}
}