Skip to content

Instantly share code, notes, and snippets.

@robotjoosen
Created May 13, 2013 09:06
Show Gist options
  • Save robotjoosen/5567077 to your computer and use it in GitHub Desktop.
Save robotjoosen/5567077 to your computer and use it in GitHub Desktop.
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