Created
May 13, 2013 09:06
-
-
Save robotjoosen/5567077 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int SER_Pin = 9; //pin 14 on the 75HC595 | |
int RCLK_Pin = 10; //pin 12 on the 75HC595 | |
int SRCLK_Pin = 11; //pin 11 on the 75HC595 | |
#define number_of_74hc595s 1 //How many of the shift registers - change this | |
#define numOfRegisterPins number_of_74hc595s * 8 //do not touch | |
boolean registers[numOfRegisterPins]; | |
unsigned long nextStep = 0; | |
unsigned long timer = 0; | |
unsigned long a = 1; | |
unsigned long b = 0; | |
int hourPin[] = {0,1,2,3}; | |
int minPin[] = {4,5}; | |
int secPin[] = {6,7}; | |
int hourLen = 4; | |
int minLen = 2; | |
int secLen = 2; | |
int s = 500; | |
int aS; | |
int bS; | |
void setup(){ | |
pinMode(SER_Pin, OUTPUT); | |
pinMode(RCLK_Pin, OUTPUT); | |
pinMode(SRCLK_Pin, OUTPUT); | |
Serial.begin(9600); | |
//reset all register pins | |
clearRegisters(); | |
writeRegisters(); | |
aS = minLen; | |
bS = minLen*secLen; | |
} | |
void loop(){s | |
if(millis() > nextStep) | |
{ | |
for(int i=0; i < secLen; i++) | |
{ | |
if(i < (a % (secLen + 1))) | |
{ | |
registers[secPin[i]] = HIGH; | |
} else { | |
registers[secPin[i]] = LOW; | |
} | |
} | |
writeRegisters(); | |
if((timer % aS) == aS-1) | |
{ | |
for(int i=0; i < minLen; i++) | |
{ | |
if(i < (a % (minLen + 1))) | |
{ | |
registers[minPin[i]] = HIGH; | |
} else { | |
registers[minPin[i]] = LOW; | |
} | |
writeRegisters(); | |
} | |
writeRegisters(); | |
a++; | |
} | |
if((timer % bS) == bS-1) | |
{ | |
for(int i=0; i < hourLen; i++) | |
{ | |
if(i < (b % (hourLen + 1))) | |
{ | |
registers[hourPin[i]] = HIGH; | |
} else { | |
registers[hourPin[i]] = LOW; | |
} | |
} | |
b++; | |
} | |
timer++; | |
nextStep = millis() + s; | |
} | |
} | |
//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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment