-
Notifications
You must be signed in to change notification settings - Fork 2
/
rgb.h
164 lines (148 loc) · 3.81 KB
/
rgb.h
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
//#define PULS_DELAY 30
#define RGB_RED 0
#define RGB_GREEN 1
#define RGB_BLUE 2
#define RGB_OFF 255
#define RGB_BLINK_DELAY 300
byte lastR = 0;
byte lastG = 0;
byte lastB = 0;
byte color = 0;
byte buttonStateOn = 255;
byte buttonStateOff = 0;
bool lastStateShort = false;
bool lastStateLong = false;
byte lastColor = 0;
//bool lastState = false;
unsigned long lastBlinkMillis = 0;
void initRGB(){
pinMode(PIN_LED_R,OUTPUT);
pinMode(PIN_LED_G,OUTPUT);
pinMode(PIN_LED_B,OUTPUT);
}
void setR(byte r){
if(r != lastR){
#ifdef EXTENDED_DEBUG
Debug.println(F("RGB: new R: %d"), r);
#endif
analogWrite(PIN_LED_R,r);
lastR = r;
}
}
void setG(byte g){
if(g != lastG){
#ifdef EXTENDED_DEBUG
Debug.println(F("RGB: new G: %d"), g);
#endif
analogWrite(PIN_LED_G,g);
lastG = g;
}
}
void setB(byte b){
if(b != lastB){
#ifdef EXTENDED_DEBUG
Debug.println(F("RGB: new B: %d"), b);
#endif
analogWrite(PIN_LED_B,b);
lastB = b;
}
}
void setRGB(byte r, byte g, byte b){
//#ifdef EXTENDED_DEBUG
// Debug.println(F("RGB: setRGB: %d, %d, %d"), r,g,b);
//#endif
setR(r);
setG(g);
setB(b);
}
/*
RGB Prios:
0. ProgState
1. button pressed
2. alarm (blink)
3. long press
4. short press
*/
void blinkRGB(){
if (millis() - lastBlinkMillis >= RGB_BLINK_DELAY) {
if(lastColor > 2) lastColor = 0;
switch (lastColor){
case RGB_RED:
setRGB(255,0,0);
break;
case RGB_GREEN:
setRGB(0,255,0);
break;
case RGB_BLUE:
setRGB(0,0,255);
break;
default:
setRGB(0,0,0);
break;
}
lastColor++;
lastBlinkMillis = millis();
}
}
void taskRgb(){
if(progMode){
blinkRGB();
}else{
if(boolButtonPressed){//Prio 1
switch (colorOnClickRgb){
case RGB_RED:
setRGB(buttonStateOn,0,0);
break;
case RGB_GREEN:
setRGB(0,buttonStateOn,0);
break;
case RGB_BLUE:
setRGB(0,0,buttonStateOn);
break;
default:
setRGB(0,0,0);
break;
}
}else{
if(alarmRgb){//Prio 2
//ToDo
}else{
if(boolLongClick){//Prio 3
switch (colorStateLongRgb){
case RGB_RED:
setRGB(buttonStateOn,0,0);
break;
case RGB_GREEN:
setRGB(0,buttonStateOn,0);
break;
case RGB_BLUE:
setRGB(0,0,buttonStateOn);
break;
default:
setRGB(0,0,0);
break;
}
}else{
if(boolShortClick){//Prio 4
switch (colorStateShortRgb){
case RGB_RED:
setRGB(buttonStateOn,0,0);
break;
case RGB_GREEN:
setRGB(0,buttonStateOn,0);
break;
case RGB_BLUE:
setRGB(0,0,buttonStateOn);
break;
default:
setRGB(0,0,0);
break;
}
}else{//off
setRGB(0,0,0);
}
}
}
}
}
}