I am trying to create a clock using 12 rgb LEDs. Time will be represented in colors, Red for seconds, green for minutes, and blue for hours.
Currently I have code that works but it does not look exactly how I want it. I am using tlc5940's to control all 12 LED's.
This is my current code(hours is omitted)
int TimeBrightness[] = {0, 1023, 2047, 4095, 2047, 1023, 0};
int oldsec = 0;
int oldmin = 0;
void NewTime(){
int seconds = second();
int minutes = minute();
Serial.println(seconds);
if(seconds < 7){
redtime[0]=TimeBrightness[seconds];
}
if(seconds >= 5 && seconds < 12){
redtime[1]=TimeBrightness[seconds-5];
}
if(seconds >= 10 && seconds < 17){
redtime[2]=TimeBrightness[seconds-10];
}
if(seconds >= 15 && seconds < 22){
redtime[3]=TimeBrightness[seconds-15];
}
if(seconds >= 20 && seconds < 27){
redtime[4]=TimeBrightness[seconds-20];
}
if(seconds >= 25 && seconds < 32){
redtime[5]=TimeBrightness[seconds-25];
}
if(seconds >= 30 && seconds < 37){
redtime[6]=TimeBrightness[seconds-30];
}
if(seconds >= 35 && seconds < 42){
redtime[7]=TimeBrightness[seconds-35];
}
if(seconds >= 40 && seconds < 47){
redtime[8]=TimeBrightness[seconds-40];
}
if(seconds >= 45 && seconds < 52){
redtime[9]=TimeBrightness[seconds-45];
}
if(seconds >= 50 && seconds < 57){
redtime[10]=TimeBrightness[seconds-50];
}
if(seconds >= 55){
redtime[11]=TimeBrightness[seconds-55];
}
if(oldsec == 59){
redtime[11]=TimeBrightness[5];
}
if(seconds == 1){
redtime[11]=TimeBrightness[6];
}
oldsec = seconds;
if(minutes < 7){
grntime[0]=TimeBrightness[minutes];
}
if(minutes >= 5 && minutes < 12){
grntime[1]=TimeBrightness[minutes-5];
}
if(minutes >= 10 && minutes < 17){
grntime[2]=TimeBrightness[minutes-10];
}
if(minutes >= 15 && minutes < 22){
grntime[3]=TimeBrightness[minutes-15];
}
if(minutes >= 20 && minutes < 27){
grntime[4]=TimeBrightness[minutes-20];
}
if(minutes >= 25 && minutes < 32){
grntime[5]=TimeBrightness[minutes-25];
}
if(minutes >= 30 && minutes < 37){
grntime[6]=TimeBrightness[minutes-30];
}
if(minutes >= 35 && minutes < 42){
grntime[7]=TimeBrightness[minutes-35];
}
if(minutes >= 40 && minutes < 47){
grntime[8]=TimeBrightness[minutes-40];
}
if(minutes >= 45 && minutes < 52){
grntime[9]=TimeBrightness[minutes-45];
}
if(minutes >= 50 && minutes < 57){
grntime[10]=TimeBrightness[minutes-50];
}
if(minutes >= 55){
grntime[11]=TimeBrightness[minutes-55];
}
if(oldmin == 59){
grntime[11]=TimeBrightness[5];
}
if(minutes == 1){
grntime[11]=TimeBrightness[6];
}
oldmin = minutes;
for(int lights = 0; lights < 12; lights++){
setLight(redtime[lights],grntime[lights],blutime[lights],lights);
}
}
void setLight(int red, int green, int blue, int lightnum){
Tlc.set(0+(3*lightnum), red);
Tlc.set(1+(3*lightnum), green);
Tlc.set(2+(3*lightnum), blue);
Tlc.update();
}
My complaint with my code is, I cant for the life of me figure out a way to gradually fade in and out colors around the LED's. Instead all I can do is get a "ticking" look.
I need a way to retrieve time from time.h in less than second increments. I have thought about millis() but I cant figure out a way to use this with time.h.
Any ideas?