-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBinaryClock.pde
More file actions
143 lines (110 loc) · 3.71 KB
/
BinaryClock.pde
File metadata and controls
143 lines (110 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
Binary Clock.
Written on Processing 3.
*/
int BCD = 4;
int FRAME_CLOCK_WIDTH = 600;
int FRAME_CLOCK_HEIGHT = 400;
int FRAME_CLOCK_MARGIN = 50;
int FIGURE_WIDTH = FRAME_CLOCK_WIDTH/6;
int FIGURE_HEIGHT = FRAME_CLOCK_HEIGHT/BCD;
int FIGURE_MARGIN = 10;
int SEPARATOR = 50;
int FONT_SIZE = 32;
char ON = '1'; // Bit in nibble
String hours;
String minutes;
String seconds;
color ledON;
color ledOff;
PFont font;
void setup() {
size(875, 500);
noStroke();
smooth();
background(255, 255, 255);
ledON = color(126, 178, 245); // Light blue
ledOff = color(222, 219, 219, 130); // Light gray
font = createFont("Serif-San", 48, true);
}
void draw() {
background(255, 255, 255);
int hours = hour();
String hourB2 = binary(hours%10, BCD); // Get the last digit of the number
hours = hours/10; // Get the number without the last digit
String hourB1 = binary(hours%10, BCD);
int minutes = minute();
String minuteB2 = binary(minutes%10, BCD);
minutes = minutes/10;
String minuteB1 = binary(minutes%10, BCD);
int seconds = second();
String secondB2 = binary(seconds%10, BCD);
seconds = seconds/10;
String secondB1 = binary(seconds%10, BCD);
// Draw the clock
for (int i = 0; i < 4; ++i) {
if ( i > 1) {
if (hourB1.charAt(i) == ON) {
fill(ledON);
} else {
fill(ledOff);
}
ellipse(calculatePosX(0), calculatePosY(i), FIGURE_WIDTH - FIGURE_MARGIN, FIGURE_HEIGHT - FIGURE_MARGIN);
}
if (hourB2.charAt(i) == ON) {
fill(ledON);
} else {
fill(ledOff);
}
ellipse(calculatePosX(1), calculatePosY(i), FIGURE_WIDTH - FIGURE_MARGIN, FIGURE_HEIGHT - FIGURE_MARGIN);
if (i > 0) {
if (minuteB1.charAt(i) == ON) {
fill(ledON);
} else {
fill(ledOff);
}
ellipse(calculatePosX(2) + SEPARATOR, calculatePosY(i), FIGURE_WIDTH - FIGURE_MARGIN, FIGURE_HEIGHT - FIGURE_MARGIN);
}
if (minuteB2.charAt(i) == ON) {
fill(ledON);
} else {
fill(ledOff);
}
ellipse(calculatePosX(3) + SEPARATOR, calculatePosY(i), FIGURE_WIDTH - FIGURE_MARGIN, FIGURE_HEIGHT - FIGURE_MARGIN);
if (i > 0) {
if (secondB1.charAt(i) == ON) {
fill(ledON);
} else {
fill(ledOff);
}
ellipse(calculatePosX(4) + 2 * SEPARATOR, calculatePosY(i), FIGURE_WIDTH - FIGURE_MARGIN, FIGURE_HEIGHT - FIGURE_MARGIN);
}
if (secondB2.charAt(i) == ON) {
fill(ledON);
} else {
fill(ledOff);
}
ellipse(calculatePosX(5) + 2 * SEPARATOR, calculatePosY(i), FIGURE_WIDTH - FIGURE_MARGIN, FIGURE_HEIGHT - FIGURE_MARGIN);
}
textFont(font, FONT_SIZE);
fill(ledON);
textAlign(CENTER);
text(unbinary(hourB1), calculatePosX(0), calculatePosY(4));
text(unbinary(hourB2), calculatePosX(1), calculatePosY(4));
text(":", calculatePosX(1) + SEPARATOR + SEPARATOR/2, calculatePosY(4));
text(unbinary(minuteB1), calculatePosX(2) + SEPARATOR, calculatePosY(4));
text(unbinary(minuteB2), calculatePosX(3) + SEPARATOR, calculatePosY(4));
text(":", calculatePosX(3) + 2 * SEPARATOR + SEPARATOR/2, calculatePosY(4));
text(unbinary(secondB1), calculatePosX(4) + 2 * SEPARATOR, calculatePosY(4));
text(unbinary(secondB2), calculatePosX(5) + 2 * SEPARATOR, calculatePosY(4));
text("8", calculatePosX(6) + 2 * SEPARATOR, calculatePosY(0) + 10);
text("4", calculatePosX(6) + 2 * SEPARATOR, calculatePosY(1) + 10);
text("2", calculatePosX(6) + 2 * SEPARATOR, calculatePosY(2) + 10);
text("1", calculatePosX(6) + 2 * SEPARATOR, calculatePosY(3) + 10);
}
int calculatePosX(int position) {
return position * FIGURE_WIDTH + FIGURE_WIDTH/2 + FRAME_CLOCK_MARGIN;
}
int calculatePosY(int position) {
return position * FIGURE_HEIGHT + FIGURE_HEIGHT/2 + FRAME_CLOCK_MARGIN/2;
}