/*
Arduino code for Individual control over each pin
Support for 40+ 74HC595 8 bit shift registers
http://bildr.org/2011/02/74hc595/
*/
#define DATA_PIN 9 // Pin connected to DS of 74HC595
#define LATCH_PIN 8 // Pin connected to STCP of 74HC595
#define CLOCK_PIN 10 // Pin connected to SHCP of 74HC595
// How many of the shift registers
#define NUM_SHIFT_REGS 2
const uint8_t numOfRegisterPins = NUM_SHIFT_REGS * 8;
int registers[16];
void setup() {
Serial.begin(9600);
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
clearRegisters();
writeRegisters();
}
int toggle[2] = {50, 50};
void loop() {
for (uint8_t i = 0; i < 16; i++) {
if (i % 2 == 0) {
setRegisterPin(i, toggle[0]);
} else {
setRegisterPin(i, toggle[1]);
}
writeRegisters();
//delay(500);
}
// int new_toggle[2];
// int s = 1;
// for(int i : toggle) {
// new_toggle[s] = i;
// s--;
// }
// s = 0;
// for(int i : new_toggle) {
// toggle[s] = i;
// s++;
// }
delay(500);
}
void clearRegisters() {
// Reset all register pins
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
registers[i] = 0;
}
}
void setRegisterPin(int index, int value) {
// Set an individual pin HIGH or LOW
registers[index] = value;
Serial.println(value);
}
void writeRegisters() {
// Set and display registers
digitalWrite(LATCH_PIN, LOW);
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
digitalWrite(CLOCK_PIN, LOW);
analogWrite(DATA_PIN, registers[i]);
digitalWrite(CLOCK_PIN, HIGH);
}
digitalWrite(LATCH_PIN, HIGH);
}