-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathanalog.h
63 lines (49 loc) · 1.61 KB
/
analog.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
#include "FastLED.h"
///@ingroup chipsets
///@{
// note - dmx simple must be included before FastSPI for this code to be enabled
template <uint8_t RED, uint8_t GREEN, uint8_t BLUE, uint8_t WHITE = 99, bool WHITEONLY = false,EOrder RGB_ORDER = RGB> class AnalogPWMController : public CPixelLEDController<RGB_ORDER> {
public:
// initialize the LED controller
virtual void init() {
if(RED != 99)
pinMode(RED, OUTPUT);
if(GREEN != 99)
pinMode(GREEN, OUTPUT);
if(BLUE != 99)
pinMode(BLUE, OUTPUT);
if(WHITE != 99)
pinMode(WHITE, OUTPUT);
}
protected:
virtual void showPixels(PixelController<RGB_ORDER> & pixels) {
int iChannel = 1;
if(pixels.has(1)) {
boolean isWhite = false;
if(WHITE != 99){
if(pixels.loadAndScale0() == pixels.loadAndScale1() && pixels.loadAndScale0() == pixels.loadAndScale2()) {
analogWrite(WHITE, pixels.loadAndScale0());
if(RED != 99)
analogWrite(RED, 0);
if(GREEN != 99)
analogWrite(GREEN, 0);
if(BLUE != 99)
analogWrite(BLUE, 0);
isWhite = true;
}
else
analogWrite(WHITE, 0);
}
if(isWhite == false || (isWhite == true && WHITEONLY == false)) {
if(RED != 99)
analogWrite(RED, pixels.loadAndScale0());
if(GREEN != 99)
analogWrite(GREEN, pixels.loadAndScale1());
if(BLUE != 99)
analogWrite(BLUE, pixels.loadAndScale2());
}
pixels.advanceData();
pixels.stepDithering();
}
}
};