forked from evilgeniuslabs/sol
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClock.h
More file actions
131 lines (100 loc) · 2.61 KB
/
Copy pathClock.h
File metadata and controls
131 lines (100 loc) · 2.61 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
/*
Sol: https://github.com/evilgeniuslabs/sol
Copyright (C) 2014-2016 Jason Coon, Evil Genius Labs
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
void drawHand(uint16_t angle, uint8_t endRing, CRGB color)
{
// rotate 90 degrees counter-clockwise
angle += 270;
while(angle >= 360)
angle -= 360;
uint8_t index = 0;
for(uint8_t ringIndex = 0; ringIndex <= endRing; ringIndex++)
{
index = angleToPixel360(angle, ringIndex);
leds[index] |= color;
}
}
void drawHandArc(uint16_t endAngle, uint8_t ringIndex, CRGB color)
{
static const uint16_t startAngle = 270;
// rotate 90 degrees counter-clockwise
endAngle += 270;
while(endAngle >= 360)
endAngle -= 360;
uint8_t startIndex = angleToPixel360(startAngle, ringIndex);
uint8_t endIndex = angleToPixel360(endAngle, ringIndex);
if(startIndex == endIndex)
{
leds[endIndex] = color;
}
else
{
fillRing360(ringIndex, color, startAngle, endAngle);
}
}
uint16_t hourAngle = 0;
uint16_t minuteAngle = 0;
uint16_t secondAngle = 0;
void updateClock()
{
hourAngle = hour();
if(hourAngle >= 12)
hourAngle -= 12;
hourAngle *= 30;
minuteAngle = minute() * 6;
secondAngle = second() * 6;
}
void updateFastClock()
{
secondAngle++;
if(secondAngle >= 360)
{
secondAngle -= 360;
minuteAngle++;
if(minuteAngle >= 360)
{
minuteAngle -= 360;
hourAngle++;
if(hourAngle >= 360)
hourAngle -= 360;
}
}
}
uint8_t handClock()
{
dimAll(240);
// fill_solid(leds, NUM_LEDS, CRGB::Black);
// hour
drawHand(hourAngle, 5, CRGB::Red);
// minute
drawHand(minuteAngle, 7, CRGB::Green);
// second
drawHand(secondAngle, 9, CRGB::Blue);
updateClock();
// updateFastClock();
return 8;
}
uint8_t arcClock()
{
fill_solid(leds, NUM_LEDS, CRGB::Black);
// hour
drawHandArc(hourAngle, 7, CRGB::Red);
// minute
drawHandArc(minuteAngle, 8, CRGB::Green);
// second
drawHandArc(secondAngle, 9, CRGB::Blue);
updateClock();
// updateFastClock();
return 0;
}