//Note, most of this code is adapted from code written by bildr. www.bildr.org int SER_Pin = 8; //pin 14 on the 75HC595 int RCLK_Pin = 9; //pin 12 on the 75HC595 int SRCLK_Pin = 10; //pin 11 on the 75HC595 int map_delay = 0; //How many of the shift registers - change this #define number_of_74hc595s 2 //do not touch #define numOfRegisterPins number_of_74hc595s * 8 boolean registers[numOfRegisterPins]; void setup(){ pinMode(SER_Pin, OUTPUT); pinMode(RCLK_Pin, OUTPUT); pinMode(SRCLK_Pin, OUTPUT); pinMode(0, INPUT); for (int thisPin = 2; thisPin < 8; thisPin++) { pinMode(thisPin, OUTPUT); } //reset all register pins clearRegisters(); writeRegisters(); } //set all register pins to LOW void clearRegisters(){ for(int i = numOfRegisterPins - 1; i >= 0; i--){ registers[i] = LOW; } } //Set and display registers //Only call AFTER all values are set how you would like (slow otherwise) 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); } //set an individual pin HIGH or LOW void setRegisterPin(int index, int value){ registers[index] = value; } void loop(){ for (int thisPin = 1; thisPin < numOfRegisterPins; thisPin++) { setRegisterPin(thisPin, HIGH); writeRegisters(); delay((map_delay = map((analogRead(0)), 0, 1023, 0, 500))); setRegisterPin(thisPin, LOW); writeRegisters(); } } //www.esologic.com