-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathModeButtonMgt.h
129 lines (117 loc) · 2.69 KB
/
ModeButtonMgt.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
#ifndef MODEBUTTONMGT_H
#define MODEBUTTONMGT_H
#include "zGlobals.h"
#include "gmaLightMusicHat.h"
#include "Effect_KR.cpp"
#include "Effect_Rainbow.cpp"
#include "Effect_Random.cpp"
#include "Effect_Sound.cpp"
#include "Effect_Fire.cpp"
#include "Effect_Sine.cpp"
#define MAX_MODE 28 // maximum number of modes
class ModeButtonMgt {
public:
static void InitCurrMode(Config_t *_cnf) {
// initialize current mode (called on mode change)
switch(_cnf->currMode) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
delete currEffect;
currEffect = new EffectSound(_cnf->currMode, _cnf);
break;
case 11:
case 12:
case 13:
case 14:
case 15:
delete currEffect;
currEffect = new EffectRainbow(_cnf->currMode-11, _cnf);
break;
case 16:
case 17:
case 18:
case 19:
delete currEffect;
currEffect = new EffectRandom(_cnf->currMode-16, _cnf);
break;
case 20:
case 21:
case 22:
delete currEffect;
currEffect = new EffectKR(_cnf->currMode-20, _cnf);
break;
case 23:
case 24:
case 25:
delete currEffect;
currEffect = new EffectFire(_cnf->currMode-23, _cnf);
break;
case 26:
case 27:
case 28:
delete currEffect;
currEffect = new EffectSine(_cnf->currMode-26, _cnf);
break;
}
}
static void ChangeMode(uint8_t _modeUp) {
// change mode up or down, never go to mode 0 (find me), has its own button
if(_modeUp == 0) {
cnf.currMode--;
if(cnf.currMode == 0) {
cnf.currMode = MAX_MODE;
}
} else {
cnf.currMode++;
if(cnf.currMode > MAX_MODE) {
cnf.currMode = 1;
}
}
//currFrame = 0;
InitCurrMode(&cnf);
}
static void ModeButton_Click() {
#ifndef ALWAYSAUTO
if(autoModeChange == 1) { // exit auto mode change on button press
autoModeChange = 0;
}
#endif
ChangeMode(1);
}
static void ModeButton_DoubleClick() {
#ifndef ALWAYSAUTO
if(autoModeChange == 1) { // exit auto mode change on button press
autoModeChange = 0;
}
#endif
ChangeMode(0);
}
static void ModeButton_Hold() {
if(autoModeChange) {
autoModeChange = 0;
LEDS.showColor(CRGB::Red);
delay(150);
} else {
autoModeChange = 1;
LEDS.showColor(CRGB::Green);
delay(150);
}
}
static void CheckAutoModeChange() {
// auto mode change every AUTOMODE_CHANGE milliseconds, choose random mode
if(millis() > AUTOMODE_CHANGE && millis() - lastAutoModeChangeTime > AUTOMODE_CHANGE) {
lastAutoModeChangeTime = millis();
cnf.currMode = random8(MAX_MODE) + 1; // random number including 0, excluding MAX_MODE
InitCurrMode(&cnf);
}
}
};
#endif