4 #if (GPIO_PIN_LED_WS2812 != UNDEF_PIN) && (GPIO_PIN_LED_WS2812_FAST != UNDEF_PIN)
5 #define WS2812_LED_IS_USED 1
8 #define BRIGHTNESS 10 // 1...256
11 static uint32_t current_rgb
;
13 static inline void LEDsend_1(void) {
14 digitalWriteFast(GPIO_PIN_LED_WS2812_FAST
, HIGH
);
15 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
16 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
17 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
18 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
19 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
20 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
21 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
22 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
24 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
25 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
26 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
27 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
28 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
29 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
30 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
31 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
34 __NOP(); __NOP(); __NOP(); __NOP();
38 digitalWriteFast(GPIO_PIN_LED_WS2812_FAST
, LOW
);
39 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
40 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
42 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
43 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
44 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
45 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
46 __NOP(); __NOP(); __NOP();
48 __NOP(); __NOP(); __NOP(); __NOP();
50 __NOP(); __NOP(); __NOP(); __NOP();
54 static inline void LEDsend_0(void) {
55 digitalWriteFast(GPIO_PIN_LED_WS2812_FAST
, HIGH
);
56 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
57 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
59 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
60 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
61 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
62 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
63 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
65 __NOP(); __NOP(); __NOP(); __NOP();
67 __NOP(); __NOP(); __NOP(); __NOP();
69 digitalWriteFast(GPIO_PIN_LED_WS2812_FAST
, LOW
);
70 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
71 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
72 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
73 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
74 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
75 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
76 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
77 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
79 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
80 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
81 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
82 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
83 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
84 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
85 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
86 __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
87 __NOP(); __NOP(); __NOP(); __NOP();
89 __NOP(); __NOP(); __NOP(); __NOP();
95 void WS281Binit(void) // takes RGB data
97 pinMode(GPIO_PIN_LED_WS2812
, OUTPUT
);
100 void WS281BsetLED(uint32_t const RGB
) // takes RGB data
102 /* Check if update is needed */
103 if (current_rgb
== RGB
)
108 uint32_t GRB
= (RGB
& 0x0000FF00) << 8;
109 GRB
|= (RGB
& 0x00FF0000) >> 8;
110 GRB
|= (RGB
& 0x000000FF);
112 uint32_t bit
= 1<<23;
116 (GRB
& bit
) ? LEDsend_1() : LEDsend_0();
120 delayMicroseconds(50); // needed to latch in the values
123 #endif /* (GPIO_PIN_LED_WS2812 != UNDEF_PIN) && (GPIO_PIN_LED_WS2812_FAST != UNDEF_PIN) */