28 port_table[0] = R_PORT0;
29 port_table[1] = R_PORT1;
30 port_table[2] = R_PORT2;
31 port_table[3] = R_PORT3;
32 port_table[4] = R_PORT4;
33 port_table[5] = R_PORT5;
34 port_table[6] = R_PORT6;
35 port_table[7] = R_PORT7;
37 for (uint8_t i = 0; i < 16; i++) {
38 mask_table[i] = 1 << i;
45 pinMode(_pin, OUTPUT);
46 digitalWriteFast(_pin, 0);
58 if (idx < 1 || idx > 2) {
75 bool setColor(uint8_t idx, uint8_t r, uint8_t g, uint8_t b)
77 uint32_t rgb = (r << 16) | (g << 8) | b;
89 if (idx < 1 || idx > 2) {
92 _brightness[idx - 1] = brightness;
99 uint8_t _brightness[2];
101 R_PORT0_Type* port_table[8];
102 uint16_t mask_table[16];
107 r = ((_leds[0] >> 16) & 0xFF) * _brightness[0] / 255;
108 g = ((_leds[0] >> 8) & 0xFF) * _brightness[0] / 255;
109 b = (_leds[0] & 0xFF) * _brightness[0] / 255;
110 ProcessWS2812BProtocol(r, g, b);
111 r = ((_leds[1] >> 16) & 0xFF) * _brightness[1] / 255;
112 g = ((_leds[1] >> 8) & 0xFF) * _brightness[1] / 255;
113 b = (_leds[1] & 0xFF) * _brightness[1] / 255;
114 ProcessWS2812BProtocol(r, g, b);
115 delayMicroseconds(500);
118 inline void digitalWriteFast(uint8_t pin, uint8_t val) __attribute__((always_inline, unused))
121 port_table[g_pin_cfg[pin].pin >> 8]->POSR = mask_table[g_pin_cfg[pin].pin & 0xff];
123 port_table[g_pin_cfg[pin].pin >> 8]->PORR = mask_table[g_pin_cfg[pin].pin & 0xff];
127 void ProcessWS2812BProtocol(uint8_t r, uint8_t g, uint8_t b)
129 volatile byte i, tempByte, m_Byte_R, m_Byte_G, m_Byte_B;
138 for (i = 0; i < 8; i++) {
139 digitalWriteFast(_pin, 1);
141 if ((m_Byte_G & 0x80) == 0) {
143 digitalWriteFast(_pin, 0);
147 for (uint32_t i = 0; i < 5; i++) {
152 digitalWriteFast(_pin, 0);
157 for (i = 0; i < 8; i++) {
158 digitalWriteFast(_pin, 1);
160 if ((m_Byte_R & 0x80) == 0) {
162 digitalWriteFast(_pin, 0);
166 for (uint32_t i = 0; i < 5; i++) {
171 digitalWriteFast(_pin, 0);
176 for (i = 0; i < 8; i++) {
177 digitalWriteFast(_pin, 1);
179 if ((m_Byte_B & 0x80) == 0) {
181 digitalWriteFast(_pin, 0);
185 for (uint32_t i = 0; i < 5; i++) {
190 digitalWriteFast(_pin, 0);
bool setColor(uint8_t idx, uint8_t r, uint8_t g, uint8_t b)
Sets the color of the LED using separate RGB values.