-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRGB_Fade2.ino
97 lines (89 loc) · 1.65 KB
/
RGB_Fade2.ino
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
#define LED_RED 9
#define LED_BLUE 10
#define LED_GREEN 11
#define SPEED 35
#define SPEEDACC 2
void setLED(int hue, int l)
{
int col[3] = { 0,0,0 };
getRGB(hue, 255, l, col);
ledWrite(col[0], col[1], col[2]);
}
void getRGB(int hue, int sat, int val, int colors[3])
{
// hue: 0-359, sat: 0-255, val (lightness): 0-255
int r, g, b, base;
if (sat == 0)
{ // Achromatic color (gray).
colors[0]=val;
colors[1]=val;
colors[2]=val;
}
else
{
base = ((255 - sat) * val)>>8;
switch(hue/60) {
case 0:
r = val;
g = (((val-base)*hue)/60)+base;
b = base;
break;
case 1:
r = (((val-base)*(60-(hue%60)))/60)+base;
g = val;
b = base;
break;
case 2:
r = base;
g = val;
b = (((val-base)*(hue%60))/60)+base;
break;
case 3:
r = base;
g = (((val-base)*(60-(hue%60)))/60)+base;
b = val;
break;
case 4:
r = (((val-base)*(hue%60))/60)+base;
g = base;
b = val;
break;
case 5:
r = val;
g = base;
b = (((val-base)*(60-(hue%60)))/60)+base;
break;
}
colors[0]=r;
colors[1]=g;
colors[2]=b;
}
}
void ledWrite(int r, int g, int b)
{
analogWrite(LED_RED, 255-r);
analogWrite(LED_GREEN, 255-g);
analogWrite(LED_BLUE, 255-b);
}
void setup()
{
randomSeed(analogRead(0));
}
int hue2 = 0;
double light2 = 128;
double fadeAmount = 1;
void loop()
{
setLED(hue2, (int) light2);
hue2++;
if(hue2 == 360)
{
hue2 = 0;
}
light2 = light2 + fadeAmount;
if (light2 < 52 || light2 > 193) //76..178
{
fadeAmount = -fadeAmount;
}
delay(random(SPEED, SPEED * SPEEDACC));
}