Lots of LEDs

04/04/2024

This is how it started, I used WLED to upload code to this matrix of matrices. I did not write the code for these, it was opensource. 

This was one of my first attempts at coding my own led clock. it used an ESP32 to log onto the NTP website and request the time to display in a graphical way..

This was many LED clocks, this took months and over 1000 lines of code.

When I put this on my wall I thought it would be super clear but its really hard to view it even from my bed (which is far).

My brother challenged me to play a movie on the display so I did. I downloaded a YouTube video, took 100s of frames, resized them and played them in order to bring Shrek in stunning 13x15.

If you want to make your own, start here 



here is all the code for the assembly of led clocks, its not formatted but if you are so inclined:


#include <Arduino.h>#include <cmath>#include <WiFi.h>#include <NTPClient.h>// #include <WiFiUdp.h>#include <Adafruit_NeoPixel.h>
int rr=100,gg=50,bb=10; //n variables int prevM; int x = 255, y; int offset; unsigned long prevT=0; unsigned long prevT2=0;int step;
int pSec; int mode=1; int prevMin; int quarter; int dirS; int dir; int xs,ys; int xa=1,ya=1; int pH; int pM; unsigned long pS; int place;
String secSp; String minSp; String hourSp;
int potpin1 = 32; int potpin2 = 33;
int r = 4; int g =4; int b=2;
int button=14;
#define LED_PIN 12 #define LED_COUNT 1024#define ssid "I believe Wi can Fi farther" #define password ""//
// #define ssid "NCC_Public_WiFi" // #define password ""
int tempx, tempy;
int blockNumbers [][3][3]={
{{0,0,0}, // 0 {0,0,0}, {0,0,0}},
{{0,0,0}, // 1 {0,0,1}, {0,0,0}},
{{0,1,0}, // 2 {0,1,0}, {0,0,0}},
{{0,0,1}, // 3 {0,1,0}, {0,0,1}},
{{0,0,1}, // 4 {0,1,0}, {0,1,1}},
{{0,0,1}, // 5 {0,1,1}, {0,1,1}},
{{0,1,1}, // 6 {0,1,1}, {0,1,1}},
{{0,1,1}, // 7 {1,1,0}, {1,1,1}},
{{1,1,1}, // 8 {1,1,0}, {1,1,1}},
{{1,1,1}, // 9 {1,1,1}, {1,1,1}},};
int letters [][5][3]={{ {1,1,1}, // A {1,0,1}, {1,1,1}, {1,0,1}, {1,0,1}},
{{0,1,1}, // B {1,0,1}, {0,1,1}, {1,0,1}, {0,1,1}},
{{1,1,1}, // C {0,0,1}, {0,0,1}, {0,0,1}, {1,1,1}},
{{0,1,1}, // D {1,0,1}, {1,0,1}, {1,0,1}, {0,1,1}},
{{1,1,1}, // E {0,0,1}, {1,1,1}, {0,0,1}, {1,1,1}},
{{1,1,1}, // F {0,0,1}, {1,1,1}, {0,0,1}, {0,0,1}},
{{1,1,1}, // G {0,0,1}, {0,0,1}, {1,0,1}, {1,1,1}},
{{1,0,1}, // H {1,0,1}, {1,1,1}, {1,0,1}, {1,0,1}},
{{1,1,1}, // I {0,1,0}, {0,1,0}, {0,1,0}, {1,1,1}},
{{1,1,1}, // J {0,1,0}, {0,1,0}, {0,1,1}, {0,1,1}},
{{1,0,1}, // K {1,0,1}, {0,1,1}, {1,0,1}, {1,0,1}},
{{0,0,1}, // L {0,0,1}, {0,0,1}, {0,0,1}, {0,1,1}},
{{1,0,1}, // L {1,1,1}, {1,1,1}, {1,0,1}, {1,0,1}},
{{1,1,1}, // L {1,0,1}, {1,0,1}, {1,0,1}, {1,0,1}},
{{1,1,1}, // L {1,0,1}, {1,0,1}, {1,0,1}, {1,1,1}},
{{1,1,1}, // L {1,0,1}, {1,1,1}, {0,0,1}, {0,0,1}},
{{0,0,0}, // L {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}},
{{1,1,1}, // L {1,0,1}, {1,1,1}, {0,1,1}, {1,0,1}},
{{1,1,1}, // L {0,0,1}, {1,1,1}, {1,0,0}, {1,1,1}},
{{1,1,1}, // L {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}},
{{1,0,1}, // L {1,0,1}, {1,0,1}, {1,0,1}, {1,1,1}},
{{1,0,1}, // L {1,0,1}, {1,0,1}, {1,0,1}, {0,1,0}},
{{1,0,1}, // L {1,0,1}, {1,0,1}, {1,1,1}, {1,1,1}},
{{1,0,1}, // L {1,0,1}, {0,1,0}, {1,0,1}, {1,0,1}},
{{1,0,1}, // L {1,0,1}, {0,1,0}, {0,1,0}, {0,1,0}},
};int arr[][5][5]={{ {1,1,1}, // 0 {1,0,1}, {1,0,1}, {1,0,1}, {1,1,1}},
{{1,0,0}, // 1 {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}},
{{1,1,1}, // 2 {1,0,0}, {1,1,1}, {0,0,1}, {1,1,1}},
{{1,1,1}, // 3 {1,0,0}, {1,1,1}, {1,0,0}, {1,1,1}},
{{1,0,1}, // 4 {1,0,1}, {1,1,1}, {1,0,0}, {1,0,0}},
{{1,1,1}, // 5 {0,0,1}, {1,1,1}, {1,0,0}, {1,1,1}},
{{1,1,1}, // 6 {0,0,1}, {1,1,1}, {1,0,1}, {1,1,1}},
{{1,1,1}, // 7 {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}},{{1,1,1}, // 8 {1,0,1}, {1,1,1}, {1,0,1}, {1,1,1}},
{{1,1,1}, // 9 {1,0,1}, {1,1,1}, {1,0,0}, {1,0,0}},
{{0,0,0}, // nothing {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}},};
int arr2[] = {0, 1, 0, 1, 0};
WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org");
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);void setup() { Serial.begin(9600); randomSeed(analogRead(0));
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi");
strip.begin(); strip.show();
timeClient.begin(); timeClient.setTimeOffset(28800); int hours = (timeClient.getHours())%12;mode=1;
pinMode(14,INPUT_PULLUP);
// for (int i=0;i<16;i++){// for (int j=0;j<16;j++){// draw(i,j,100,0,100);// }// }}
void draw(int tempx, int tempy, int r,int g,int b){
int index = 0;
if (tempx<16 && tempy<16){ // Panel 0x = tempx;y = tempy;
if (y%2 == 0) {// even index = y * 16 + x; } else{ index = y * 16 + 15 - x; }
}///////////////////////////////////////
if (tempx<16 && tempy>=16){ // Panel 1 x = tempx;y = tempy;
y -= 16;
if (x % 2 == 0){ // even index = x * 16 + y; } else { index = x * 16 + 15 - y; }
index = (index + 255 - 2 * index) + 256;
}
////////////////////////////////////////////////////////////////if (tempx>=16 && tempy>=16){ // Panel 2 x = tempx;y = tempy;
x -= 16; y -= 16; if (y%2 == 0) {// even index = y * 16 + x; } else{ index = y * 16 + 15 - x; } index += 512; }
///////////////////////////////////////////////////////if (tempx>=16 && tempy<16){ //Panel 3x = tempx;y = tempy;x -= 16;
if (x % 2 == 0){ // even index = x * 16 + y; } else { index = x * 16 + 15 - y; }
index = (index + 255 - 2 * index) + 768;
}
strip.setPixelColor(index,strip.Color(r,g,b)); strip.show();
}
void drawLine(int x1, int y1, int x2, int y2, int r, int g, int b) { // Bresenham's line algorithm int dx = abs(x2 - x1); int dy = -abs(y2 - y1); int sx = (x1 < x2) ? 1 : -1; int sy = (y1 < y2) ? 1 : -1; int err = dx + dy;
while (true) {
draw(x1,y1,r,g,b);
if (x1 == x2 && y1 == y2) { break; }
int e2 = 2 * err;
if (e2 >= dy) { err += dy; x1 += sx; }
if (e2 <= dx) { err += dx; y1 += sy; } }}
void drawHand(int x, int y, float angle, float length, int r, int g, int b) { // Rotate the coordinates by 90 degrees counterclockwise int rotatedX = 15 - (int)(length * cos(radians(angle))); int rotatedY = 15 - (int)(length * sin(radians(angle)));
// Draw the line with the specified color drawLine(x, y, rotatedX, rotatedY, r, g, b);}
String spellNumber(int number) {const char *ones[] = {"ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"};const char *teens[] = {"TEN", "ELEVEN", "TWELVE", "THIRTEEN", "FOURTEEN", "FIFTEEN", "SIXTEEN", "SEVENTEEN", "EIGHTEEN", "NINETEEN"};const char *tens[] = {"", "", "TWENTY", "THIRTY", "FORTY", "FIFTY"};
String result = "";int place;
if (number >= 20) { result += String(tens[number / 10]) + " "; number %= 10; } else if (number >= 10) { result += String(teens[number - 10]) + " "; number = 0; // Skip the ones place for teens }
if (number > 0) { result += String(ones[number]) + " "; }
return result;}
void displaySpelledNumber(String spelledNumber, int row) {
for (int i = 0; i < spelledNumber.length(); i++) { char currentChar = spelledNumber.charAt(i); int asciiValue = int(currentChar);
if (asciiValue >= 65 && asciiValue <= 90) { place+=3;
if (i==0){ place=0; }
int letterIndex = asciiValue - 65;
for (int k=0;k<5;k++){ for (int j=0;j<3;j++){ draw(29-place+j, row+k, letters[letterIndex][k][j] * 150*(place+1)*.3143, letters[letterIndex][k][j]*70*(place+1)*1.6125, letters[letterIndex][k][j]*(place+1)*99*8.283);
} } } }}
void drawAnalogClock(int hours, int minutes, int seconds) { for (int i=0;i<32;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); }}
// Calculate the angles for each clock hand float secondAngle = seconds * 6.0; // 360 degrees / 60 seconds float minuteAngle = (minutes * 6.0) + (seconds * 0.1); // 360 degrees / 60 minutes + fine-tune with seconds float hourAngle = (hours % 12) * 30.0 + (minutes * 0.5); // 360 degrees / 12 hours + fine-tune with minutes
// Calculate the hand lengths float secondHandLength = 16.0; float minuteHandLength = 13.0; float hourHandLength = 11.0;
// // Draw mirrored clock hands on the left side // drawHand(15, 15, secondAngle, secondHandLength, 255, 0, 0); // Red // drawHand(15, 15, minuteAngle, minuteHandLength, 0, 255, 0); // Green // drawHand(15, 15, hourAngle, hourHandLength, 0, 0, 255); // Blue
// Draw mirrored clock hands on the right side drawHand(15, 15, 90 - secondAngle, secondHandLength, 255, 0, 0); // Red drawHand(15, 15, 90 - minuteAngle, minuteHandLength, 0, 255, 0); // Green drawHand(15, 15, 90 - hourAngle, hourHandLength, 0, 0, 255); // Blue}
void binary(int x, int pos, int r, int g, int b){ for (int i=5; i>=0; i--){if (x >= pow(2,i)){ x = x - pow(2,i); draw(pos,20-i,r,g,b); }else{ draw(pos,20-i,0,0,0);
} }}
void loop() {
timeClient.update();
int hours = (timeClient.getHours())%12; int minutes = timeClient.getMinutes(); int seconds = timeClient.getSeconds();
Serial.print(hours);
Serial.println(minutes);
draw(10,10 ,seconds%10,0,minutes%10);
draw(0,5,0,minutes%10,seconds%6);
draw(6,17,minutes%10,0,minutes%12);if (Serial.available() > 0) { mode = Serial.read()-49; for (int i=0;i<32;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); }}
Serial.print("I received: "); Serial.println(mode, DEC); }if (hours!=pH){
pH = hours;
mode++; for (int i=0;i<32;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); }} Serial.println(mode); if (mode >= 6){ mode = 1; } }
switch(mode){
case 0:
for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ int h = floor(hours/10); draw(i+28,j+15,blockNumbers[h][i][j]*200,0,30); /// tens of hours }}
for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ draw(i+24,j+15,blockNumbers[hours%10][i][j]*200,0,30); // ones of hours } }
for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ int m = floor(minutes/10); draw(i+17,j+15,blockNumbers[m][i][j]*200,0,30); // tens of minutes } }
for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ draw(i+13,j+15,blockNumbers[minutes%10][i][j]*200,0,30); // ones of minutes } }for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ int s = floor(seconds/10); draw(i+6,j+15,blockNumbers[s][i][j]*200,0,30); // tens of seconds } }
for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ draw(i+2,j+15,blockNumbers[seconds%10][i][j]*200,0,30); // ones of seconds } }
break;if (seconds % 1 == 0 || seconds % 1 == 1){ for (int i=0; i<3; i++){ for (int j=0; j<5; j++){ if (floor(hours/10==1)){ draw(i+27, j+16,arr[hours/10][j][i]*g,arr[hours/10][j][i]*b,arr[hours/10][j][i]*r); // /hours }else { draw(i+27, j+16,arr[10][j][i],arr[10][j][i]*b,arr[10][j][i] ); // /hours } } } }
if (seconds % 1 == 0 || seconds % 1 == 1){ for (int i=0; i<3; i++){ for (int j=0; j<5; j++){ // draw(3-seconds%z,j,0,0,0); draw(i+23 , j+16,arr[hours%10][j][i],arr[hours%10][j][i]*b,arr[hours%10][j][i]); // %hours
} } }
for (int i=0; i < 5; i++){ draw(21, 16+i, arr2[i]*g, arr2[i],arr2[i]);}if (seconds % 1 == 0 || seconds % 1 == 1){ for (int i=0; i<3; i++){ for (int j=0; j<5; j++){ // draw(4-seconds%z,j,0,0,0); draw(i+ 17, j+16,arr[minutes/10][j][i],arr[minutes/10][j][i],arr[minutes/10][j][i]*g); // /mintues
} } }
if (seconds % 1 == 0 || seconds % 1 == 1){ for (int i=0; i<3; i++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(i+13, j+16,arr[minutes%10][j][i]*r,arr[minutes%10][j][i]*b,arr[minutes%10][j][i]*g); // %mintues
} } }
for (int i=0; i < 5; i++){ draw(12, 16+i, arr2[i]*g, arr2[i]*g,arr2[i]*g);}
for (int i=0; i<3; i++){ for (int j=0; j<5; j++){ // draw(4-seconds%z,j,0,0,0); draw(i+ 8, j+16,arr[seconds/10][j][i]*g,arr[seconds/10][j][i]*g,arr[seconds/10][j][i]); // /seconds
} }
for (int i=0; i<3; i++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(i+5, j+16,arr[seconds%10][j][i],arr[seconds%10][j][i]*7*(seconds%10+10),arr[seconds%10][j][i]*g/2); // %second
} }
case 2: for (int i = 0; i < 20; i++) { /////////////////// Hours if (i < hours) { if(i<5){ draw(5,21-i,r,r,0); draw(1,21-i,r,r,0); draw(2,21-i,r,r,0); draw(3,21-i,r,r,0); draw(4,21-i,r,r,0); }else{ draw(5,20-i,r,r,0); draw(1,20-i,r,r,0); draw(2,20-i,r,r,0); draw(3,20-i,r,r,0); draw(4,20-i,r,r,0); }
} if (hours % 12 == 0) { for (int i=0;i<5;i++){ for (int j=0; j<32;j++){ draw(i,j,0,0,0); } } } }for (int i = 0; i < 20; i++) { ///////////////// Minutes(10s) if (i < floor(minutes / 10)) { draw(11,21-i,x,0,0); draw(7,21-i,x,0,0); draw(8,21-i,x,0,0); draw(9,21-i,x,0,0); draw(10,21-i,x,0,0);
}
if (minutes == 0) { for (int i=5;i<10;i++){ for (int j=0; j<32;j++){ draw(9,15-i,0,0,0); } } } }for (int i = 0; i < 11; i++) { ///////////////////// Minutes (1s) if (i < (minutes%10)) { if (i<5){
draw(17,21-i,x,0,x); draw(13,21-i,x,0,x); draw(13,21-i,x,0,x); draw(14,21-i,x,0,x); draw(14,21-i,x,0,x); draw(15,21-i,x,0,x); draw(16,21-i,x,0,x); draw(17,21-i,x,0,x); }else{
draw(17,20-i,x,0,x); draw(13,20-i,x,0,x); draw(14,20-i,x,0,x); draw(15,20-i,x,0,x); draw(16,20-i,x,0,x); draw(13,20-i,x,0,x); draw(17,20-i,x,0,x); draw(13,20-i,x,0,x);
}
} }
if (minutes % 11 ==0) { for (int i=12;i<18;i++){ for (int j=0; j<32;j++){ draw(i,j,0,0,0); } } }for (int i = 0; i < 60; i++) {
if (i < floor(seconds/10)) { if(i<5){
draw(23,21-i,x,x,0); draw(19,21-i,x,x,0); draw(20,21-i,x,x,0); draw(21,21-i,x,x,0); draw(22,21-i,x,x,0); draw(22,21-i,x,x,0); draw(23,21-i,x,x,0);
}
else{
draw(23,20-i,0,x,0); draw(19,20-i,0,x,0); draw(20,20-i,0,x,0); draw(21,20-i,0,x,0); draw(22,20-i,0,x,0);
} } } if (minutes ==0) { for (int i=19;i<24;i++){ for (int j=0; j<32;j++){ draw(i,j,0,0,0); } } }
if (seconds%10==0){ for (int i=24;i<31;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); }}}
for (int i = 0; i < 12; i++) {
if (i < floor(seconds%10)) { if(i<5){
draw(28,21-i,x,0,0); draw(29,21-i,x,0,0); draw(25,21-i,x,0,0); draw(26,21-i,x,0,0); draw(27,21-i,x,0,0);
}else{
draw(28,20-i,x,0,0); draw(29,20-i,x,0,0); draw(25,20-i,x,0,0); draw(26,20-i,x,0,0); draw(27,20-i,x,0,0);
} } }
break;
case 3:
binary(hours, 8,0,200,0);binary(hours, 7,0,200,0);binary(hours, 10,0,200,0);binary(hours, 9,0,200,0);binary(minutes, 17,0,0,200);binary(minutes, 14,0,0,200);binary(minutes, 15,0,0,200);binary(minutes, 16,0,0,200);binary(seconds, 22,200,0,0);binary(seconds, 23,200,0,0);binary(seconds, 24,200,0,0);binary(seconds, 21,200,0,0); delay(20); // for (int i=0;i<32;i++){ // for (int j=0;j<32;j++){ // draw(i,j,0,0,0); // } // }
break;
case 3:
drawAnalogClock(hours,minutes,seconds);
break;
case 5:
secSp = spellNumber(seconds);minSp = spellNumber(minutes);hourSp = spellNumber(hours);
// Serial.print(hourSp);// Serial.print(" ");// Serial.print(minSp);// Serial.print(" ");// Serial.println(secSp);
displaySpelledNumber(hourSp, 0);displaySpelledNumber(minSp, 10);displaySpelledNumber(secSp, 20);
if (prevT2 != minutes){ prevT2 = minutes; for (int i=0;i<32;i++){ for (int j=10;j<20;j++){ draw(i,j,0,0,0); } }}
if (prevT != seconds){ prevT = seconds; for (int i=0;i<32;i++){ for (int j=19;j<32;j++){ draw(i,j,0,0,0); } }}
break;case 0:
for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(5+g, 11+j,0,0,arr[5][j][g]*200); // %second
} }
for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(11+g, 3+j,arr[3][j][g]*200,0,0); // %second
} }
for (int i=0;i<32;i++){ draw(9,i,50,50,50); if (i == 14){ draw(9,i,50,50,200); }}
for (int i=0;i<32;i++){ draw(i,9,50,50,50); if (i == 12){ draw(i,9,200,50,50);
}} draw(floor(seconds/10+10),seconds%10+10,100,200,100); draw(floor(minutes/10+10),minutes%10+10,200,100,100); draw(floor(hours/10+10),hours%10+10,100,100,200);
if (prevT != seconds){ prevT = seconds; for (int i=10;i<32;i++){ for (int j=10;j<32;j++){ draw(i,j,0,0,0); } }}
break;
case 2:
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(28-i*3+g, j,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // %second if (i==hours/10){ draw(28-i*3+g, j,arr[i][j][g]*255,arr[i][j][g]*b,arr[i][j][g]*g); // %second } } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(28-i*3+g, j+5,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // %second if (i==hours%10){ draw(28-i*3+g, j+5,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]*255); // %second } } }}for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(28-i*3+g, j+10,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // %second if (i==minutes/10){ draw(28-i*3+g, j+10,arr[i][j][g]*255,arr[i][j][g]*b,arr[i][j][g]*g); // %second } } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(28-i*3+g, j+15,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // %second if (i==minutes%10){ draw(28-i*3+g, j+15,arr[i][j][g]*255,arr[i][j][g]*120,arr[i][j][g]*g); // %second } } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(28-i*3+g, j+20,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // %second if (i==seconds/10){ draw(28-i*3+g, j+20,arr[i][j][g]*255,arr[i][j][g]*b,arr[i][j][g]*59); // %second } } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(28-i*3+g, j+25,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // %second if (i==seconds%10){ draw(28-i*3+g, j+25,arr[i][j][g]*255,arr[i][j][g]*b,arr[i][j][g]*g); // %second } } }}
break;
case 4:if (hours==0){ for (int i=26;i<29;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); } }}for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((15 + i*6 + j -hours/10*6)<=31 && (15 + i*6 + j -hours/10*6)>0){
draw(g+28,15 + i*6 + j -hours/10*6,arr[i][j][g],arr[i][j][g],arr[i][j][g]*b); // %hours
if (i==hours/10){ draw(g+28,15 + j,arr[i][j][g],arr[i][j][g],arr[i][j][g]*190); } } else{
}
} }}if (hours%10==0){ for (int i=22;i<25;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); } }}for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((15 + i*6 + j -hours%10*6)<=31 && (15 + i*6 + j -hours%10*6)>0){
draw(g+24,15 + i*6 + j -hours%10*6,arr[i][j][g],arr[i][j][g],arr[i][j][g]*b); // %hours
if (i==hours%10){ draw(g+24,15 + j,arr[i][j][g],arr[i][j][g],arr[i][j][g]*190); } } else{
}
} }}for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((15 + i*6 + j -minutes/10*6)<=31 && (15 + i*6 + j -minutes/10*6)>0){
draw(g+17,15 + i*6 + j -minutes/10*6,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // /minutes
if (i==minutes/10){ draw(g+17,15 + j,arr[i][j][g],arr[i][j][g]*255,arr[i][j][g]*g); } } else{
}
} }}
if (minutes%10==0){ for (int i=19;i<21;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); } }}if (seconds==0){ for (int i=11;i<14;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((15 + i*6 + j -minutes%10*6)<=31 && (15 + i*6 + j -minutes%10*6)>0){
draw(g+13,15 + i*6 + j -minutes%10*6,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]); // %minutes
if (i==minutes%10){ draw(g+13,15 + j,arr[i][j][g],arr[i][j][g]*255,arr[i][j][g]*g); } } else{
}
} }}if (seconds%10==0){ for (int i=4;i<8;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((15 + i*6 + j -seconds/10*6)<=31 && (15 + i*6 + j -seconds/10*6)>0){
draw(g+6,15 + i*6 + j -seconds/10*6,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // /seconds
if (i==seconds/10){ draw(g+6,15 + j,arr[i][j][g]*190,arr[i][j][g]*b,arr[i][j][g]*g); } } else{
}
} }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){
if ((15 + i*6 + j -seconds%10*6)<=31 && (15 + i*6 + j -seconds%10*6)>0){
draw(g+2,15 + i*6 + j -seconds%10*6,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // /seconds
if (i==seconds%10){ draw(g+2,15 + j,arr[i][j][g]*190,arr[i][j][g]*b,arr[i][j][g]*g); } } else{
}
} }}if (prevT != seconds){ prevT = seconds; for (int i=0;i<4;i++){ for (int j=0;j<32;j++){ draw(i,j,0,0,0); } }}for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); draw(28-i*3+g+(hours/10)*3, j,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // /hours if (i==hours/10){ draw(28-i*3+g+(hours/10)*3, j,arr[i][j][g],arr[i][j][g]*240,arr[i][j][g]*g); // /hours } } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0);
if ((28-i*3+g+(hours%10)*3)<=31 && (28-i*3+g+(hours%10)*3)>0){
draw(28-i*3+g+(hours%10)*3, j+5,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // %hours if (i==hours%10){ draw(28-i*3+g+(hours%10)*3, j+5,arr[i][j][g],arr[i][j][g]*b,arr[i][j][g]*255); // %hours } }else{} } }}for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((28-i*3+g+(minutes/10)*3)<=31 && (28-i*3+g+(minutes/10)*3)>0){
draw(28-i*3+g+(minutes/10)*3, j+10,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // /minutes if (i==minutes/10){ draw((28-i*3+g+(minutes/10)*3), j+10,arr[i][j][g]*255,arr[i][j][g]*b,arr[i][j][g]*g); // /minutes } }else{} } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0);
if ((28-i*3+g+(minutes%10)*3)<=31 && (28-i*3+g+(minutes%10)*3)>0){
draw(28-i*3+g+(minutes%10)*3, j+15,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // %minutes if (i==minutes%10){ draw(28-i*3+g+(minutes%10)*3,j+15,arr[i][j][g]*255,arr[i][j][g]*120,arr[i][j][g]*g); // %mintues } }else{} } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((28-i*3+g+(seconds/10)*3)<=31 && (28-i*3+g+(seconds/10)*3)>0){
draw(28-i*3+g+(seconds/10)*3, j+20,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // /second if (i==seconds/10){ draw(28-i*3+g+(seconds/10)*3, j+20,arr[i][j][g]*255,arr[i][j][g]*b,arr[i][j][g]*59); // /second } }else{} } }}
for (int i=0;i<10;i++){ for (int g=0; g<3; g++){ for (int j=0; j<5; j++){ // draw(12-seconds%20,j,0,0,0); if ((28-i*3+g+(seconds%10)*3)<=31 && (28-i*3+g+(seconds%10)*3)>0){ draw(28-i*3+g+(seconds%10)*3, j+25,arr[i][j][g]*b,arr[i][j][g],arr[i][j][g]); // %second if (i==seconds%10){ draw(28-i*3+g+(seconds%10)*3, j+25,arr[i][j][g]*255,arr[i][j][g]*b,arr[i][j][g]*g); // %second } } else{
} for (int i=0;i<32;i++){ for (int j=30;j<32;j++){ draw(i,j,0,0,0); } } if (prevT != seconds){ prevT = seconds; for (int i=0;i<32;i++){ for (int j=25;j<32;j++){ draw(i,j,0,0,0); } }} } }}
break;}}

Create your website for free!