const int latchPin = 5; // Latch pin of 74HC595 is connected to Digital pin 5
const int clockPin = 6; // Clock pin of 74HC595 is connected to Digital pin 6
const int dataPin = 4; // Data pin of 74HC595 is connected to Digital pin 4
byte leds = 0; // Variable to hold the pattern of which LEDs are currently turned on or off
void setup() {
// Set all the pins that control 74HC595 as OUTPUT
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
resetAllRelays();
}
void loop() {
if (Serial.available() > 0) {
int number = Serial.parseInt();
Serial.print("Relay ");
Serial.print(number);
Serial.print(" is now ");
if (bitRead(leds, number) == 0) {
Serial.println("on");
bitWrite(leds, number, 1);
} else {
Serial.println("off");
bitWrite(leds, number, 0);
}
updateShiftRegister();
}
}
void updateShiftRegister() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, ~leds);
digitalWrite(latchPin, HIGH);
}
void resetAllRelays() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 0b11111111);
digitalWrite(latchPin, HIGH);
}