36#ifndef ADAFRUIT_NEOPIXEL_H
37#define ADAFRUIT_NEOPIXEL_H
43#include <Adafruit_TinyUSB.h>
52#if defined(TARGET_GIGA) || defined(TARGET_M4)
54#include "pinDefinitions.h"
57#if defined(ARDUINO_ARCH_RP2040)
59#include "hardware/pio.h"
60#include "hardware/clocks.h"
61#include "rp2040_pio.h"
91#define NEO_RGB ((0 << 6) | (0 << 4) | (1 << 2) | (2))
92#define NEO_RBG ((0 << 6) | (0 << 4) | (2 << 2) | (1))
93#define NEO_GRB ((1 << 6) | (1 << 4) | (0 << 2) | (2))
94#define NEO_GBR ((2 << 6) | (2 << 4) | (0 << 2) | (1))
95#define NEO_BRG ((1 << 6) | (1 << 4) | (2 << 2) | (0))
96#define NEO_BGR ((2 << 6) | (2 << 4) | (1 << 2) | (0))
100#define NEO_WRGB ((0 << 6) | (1 << 4) | (2 << 2) | (3))
101#define NEO_WRBG ((0 << 6) | (1 << 4) | (3 << 2) | (2))
102#define NEO_WGRB ((0 << 6) | (2 << 4) | (1 << 2) | (3))
103#define NEO_WGBR ((0 << 6) | (3 << 4) | (1 << 2) | (2))
104#define NEO_WBRG ((0 << 6) | (2 << 4) | (3 << 2) | (1))
105#define NEO_WBGR ((0 << 6) | (3 << 4) | (2 << 2) | (1))
107#define NEO_RWGB ((1 << 6) | (0 << 4) | (2 << 2) | (3))
108#define NEO_RWBG ((1 << 6) | (0 << 4) | (3 << 2) | (2))
109#define NEO_RGWB ((2 << 6) | (0 << 4) | (1 << 2) | (3))
110#define NEO_RGBW ((3 << 6) | (0 << 4) | (1 << 2) | (2))
111#define NEO_RBWG ((2 << 6) | (0 << 4) | (3 << 2) | (1))
112#define NEO_RBGW ((3 << 6) | (0 << 4) | (2 << 2) | (1))
114#define NEO_GWRB ((1 << 6) | (2 << 4) | (0 << 2) | (3))
115#define NEO_GWBR ((1 << 6) | (3 << 4) | (0 << 2) | (2))
116#define NEO_GRWB ((2 << 6) | (1 << 4) | (0 << 2) | (3))
117#define NEO_GRBW ((3 << 6) | (1 << 4) | (0 << 2) | (2))
118#define NEO_GBWR ((2 << 6) | (3 << 4) | (0 << 2) | (1))
119#define NEO_GBRW ((3 << 6) | (2 << 4) | (0 << 2) | (1))
121#define NEO_BWRG ((1 << 6) | (2 << 4) | (3 << 2) | (0))
122#define NEO_BWGR ((1 << 6) | (3 << 4) | (2 << 2) | (0))
123#define NEO_BRWG ((2 << 6) | (1 << 4) | (3 << 2) | (0))
124#define NEO_BRGW ((3 << 6) | (1 << 4) | (2 << 2) | (0))
125#define NEO_BGWR ((2 << 6) | (3 << 4) | (1 << 2) | (0))
126#define NEO_BGRW ((3 << 6) | (2 << 4) | (1 << 2) | (0))
136#define NEO_KHZ800 0x0000
137#ifndef __AVR_ATtiny85__
138#define NEO_KHZ400 0x0100
163static const uint8_t PROGMEM _NeoPixelSineTable[256] = {
164 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170,
165 173, 176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211,
166 213, 215, 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 238, 240,
167 241, 243, 244, 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254,
168 254, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251,
169 250, 250, 249, 248, 246, 245, 244, 243, 241, 240, 238, 237, 235, 234, 232,
170 230, 228, 226, 224, 222, 220, 218, 215, 213, 211, 208, 206, 203, 201, 198,
171 196, 193, 190, 188, 185, 182, 179, 176, 173, 170, 167, 165, 162, 158, 155,
172 152, 149, 146, 143, 140, 137, 134, 131, 128, 124, 121, 118, 115, 112, 109,
173 106, 103, 100, 97, 93, 90, 88, 85, 82, 79, 76, 73, 70, 67, 65,
174 62, 59, 57, 54, 52, 49, 47, 44, 42, 40, 37, 35, 33, 31, 29,
175 27, 25, 23, 21, 20, 18, 17, 15, 14, 12, 11, 10, 9, 7, 6,
176 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0,
177 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9, 10, 11,
178 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35, 37,
179 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76,
180 79, 82, 85, 88, 90, 93, 97, 100, 103, 106, 109, 112, 115, 118, 121,
191static const uint8_t PROGMEM _NeoPixelGammaTable[256] = {
192 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
193 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
194 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3,
195 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6,
196 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10,
197 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17,
198 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
199 25, 26, 27, 27, 28, 29, 29, 30, 31, 31, 32, 33, 34, 34, 35,
200 36, 37, 38, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, 48,
201 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
202 64, 65, 66, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 80, 81,
203 82, 84, 85, 86, 88, 89, 90, 92, 93, 94, 96, 97, 99, 100, 102,
204 103, 105, 106, 108, 109, 111, 112, 114, 115, 117, 119, 120, 122, 124, 125,
205 127, 129, 130, 132, 134, 136, 137, 139, 141, 143, 145, 146, 148, 150, 152,
206 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182,
207 184, 186, 188, 191, 193, 195, 197, 199, 202, 204, 206, 209, 211, 213, 215,
208 218, 220, 223, 225, 227, 230, 232, 235, 237, 240, 242, 245, 247, 250, 252,
215#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
216extern "C" void espInit();
236 void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
237 void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w);
239 void fill(uint32_t c = 0, uint16_t first = 0, uint16_t count = 0);
273 uint32_t now = micros();
277 return (now -
endTime) >= 300L;
319 return pgm_read_byte(&_NeoPixelSineTable[x]);
333 return pgm_read_byte(&_NeoPixelGammaTable[x]);
346 static uint32_t
Color(uint8_t r, uint8_t g, uint8_t b) {
347 return ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
361 static uint32_t
Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
362 return ((uint32_t)w << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
364 static uint32_t
ColorHSV(uint16_t hue, uint8_t sat = 255, uint8_t val = 255);
377 static uint32_t
gamma32(uint32_t x);
379 void rainbow(uint16_t first_hue = 0, int8_t reps = 1,
380 uint8_t saturation = 255, uint8_t
brightness = 255,
381 bool gammify =
true);
386#if defined(ARDUINO_ARCH_RP2040)
387 bool rp2040claimPIO(
void);
388 void rp2040releasePIO(
void);
392 uint pio_program_offset = 0;
413 volatile uint8_t *port;
417#if defined(ARDUINO_ARCH_STM32) || \
418 defined(ARDUINO_ARCH_ARDUINO_CORE_STM32) || \
419 defined(ARDUINO_ARCH_CH32) || \
421 GPIO_TypeDef *gpioPort;
425#if defined(TARGET_GIGA) || defined(TARGET_M4)
426 mbed::DigitalInOut *gpio;
#define NEO_KHZ800
800 KHz data transmission
Definition Adafruit_NeoPixel.h:136
#define NEO_GRB
Transmit as G,R,B.
Definition Adafruit_NeoPixel.h:93
uint16_t neoPixelType
3rd arg to Adafruit_NeoPixel constructor
Definition Adafruit_NeoPixel.h:147
static uint32_t gamma32(uint32_t x)
A gamma-correction function for 32-bit packed RGB or WRGB colors. Makes color transitions appear more...
Definition Adafruit_NeoPixel.cpp:3761
uint8_t * pixels
Holds LED color values (3 or 4 bytes each)
Definition Adafruit_NeoPixel.h:405
void updateType(neoPixelType t)
Change the pixel format of a previously-declared Adafruit_NeoPixel strip object. If format changes fr...
Definition Adafruit_NeoPixel.cpp:206
uint32_t endTime
Latch timing reference.
Definition Adafruit_NeoPixel.h:410
static uint32_t ColorHSV(uint16_t hue, uint8_t sat=255, uint8_t val=255)
Convert hue, saturation and value into a packed 32-bit RGB color that can be passed to setPixelColor(...
Definition Adafruit_NeoPixel.cpp:3574
bool begun
true if begin() previously called successfully
Definition Adafruit_NeoPixel.h:400
Adafruit_NeoPixel(void)
"Empty" NeoPixel constructor when length, pin and/or pixel type are not known at compile-time,...
Definition Adafruit_NeoPixel.cpp:107
void fill(uint32_t c=0, uint16_t first=0, uint16_t count=0)
Fill all or part of the NeoPixel strip with a color.
Definition Adafruit_NeoPixel.cpp:3528
uint8_t gOffset
Index of green byte.
Definition Adafruit_NeoPixel.h:407
void show(void)
Transmit pixel data in RAM to NeoPixels.
Definition Adafruit_NeoPixel.cpp:414
uint16_t numPixels(void) const
Return the number of pixels in an Adafruit_NeoPixel strip object.
Definition Adafruit_NeoPixel.h:304
bool is800KHz
true if 800 KHz pixels
Definition Adafruit_NeoPixel.h:397
static neoPixelType str2order(const char *v)
Convert pixel color order from string (e.g. "BGR") to NeoPixel color order constant (e....
Definition Adafruit_NeoPixel.cpp:3821
~Adafruit_NeoPixel()
Deallocate Adafruit_NeoPixel object, set data pin back to INPUT.
Definition Adafruit_NeoPixel.cpp:119
void updateLength(uint16_t n)
Change the length of a previously-declared Adafruit_NeoPixel strip object. Old data is deallocated an...
Definition Adafruit_NeoPixel.cpp:176
uint8_t rOffset
Red index within each 3- or 4-byte pixel.
Definition Adafruit_NeoPixel.h:406
uint16_t numBytes
Size of 'pixels' buffer below.
Definition Adafruit_NeoPixel.h:402
bool begin(void)
Configure NeoPixel pin for output.
Definition Adafruit_NeoPixel.cpp:143
void rainbow(uint16_t first_hue=0, int8_t reps=1, uint8_t saturation=255, uint8_t brightness=255, bool gammify=true)
Fill NeoPixel strip with one or more cycles of hues. Everyone loves the rainbow swirl so much,...
Definition Adafruit_NeoPixel.cpp:3794
uint8_t brightness
Strip brightness 0-255 (stored as +1)
Definition Adafruit_NeoPixel.h:404
bool canShow(void)
Check whether a call to show() will start sending data immediately or will 'block' for a required int...
Definition Adafruit_NeoPixel.h:257
void setBrightness(uint8_t)
Adjust output brightness. Does not immediately affect what's currently displayed on the LEDs....
Definition Adafruit_NeoPixel.cpp:3712
void setPin(int16_t p)
Set/change the NeoPixel output pin number. Previous pin, if any, is set to INPUT and the new pin is s...
Definition Adafruit_NeoPixel.cpp:3388
int16_t pin
Output pin number (-1 if not yet set)
Definition Adafruit_NeoPixel.h:403
Adafruit_NeoPixel(uint16_t n, int16_t pin=6, neoPixelType type=NEO_GRB+NEO_KHZ800)
NeoPixel constructor when length, pin and pixel type are known at compile-time.
Definition Adafruit_NeoPixel.cpp:84
uint8_t getBrightness(void) const
Retrieve the last-set brightness value for the strip.
Definition Adafruit_NeoPixel.cpp:3752
uint8_t * getPixels(void) const
Get a pointer directly to the NeoPixel data buffer in RAM. Pixel data is stored in a device-native fo...
Definition Adafruit_NeoPixel.h:293
void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b)
Set a pixel's color using separate red, green and blue components. If using RGBW pixels,...
Definition Adafruit_NeoPixel.cpp:3434
static uint8_t gamma8(uint8_t x)
An 8-bit gamma-correction function for basic pixel brightness adjustment. Makes color transitions app...
Definition Adafruit_NeoPixel.h:332
uint8_t wOffset
Index of white (==rOffset if no white)
Definition Adafruit_NeoPixel.h:409
uint32_t getPixelColor(uint16_t n) const
Query the color of a previously-set pixel.
Definition Adafruit_NeoPixel.cpp:3661
int16_t getPin(void) const
Retrieve the pin number used for NeoPixel data output.
Definition Adafruit_NeoPixel.h:299
uint16_t numLEDs
Number of RGB LEDs in strip.
Definition Adafruit_NeoPixel.h:401
void clear(void)
Fill the whole NeoPixel strip with 0 / black / off.
Definition Adafruit_NeoPixel.cpp:3757
static uint32_t Color(uint8_t r, uint8_t g, uint8_t b)
Convert separate red, green and blue values into a single "packed" 32-bit RGB color.
Definition Adafruit_NeoPixel.h:346
uint8_t bOffset
Index of blue byte.
Definition Adafruit_NeoPixel.h:408
static uint32_t Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
Convert separate red, green, blue and white values into a single "packed" 32-bit WRGB color.
Definition Adafruit_NeoPixel.h:361
static uint8_t sine8(uint8_t x)
An 8-bit integer sine wave function, not directly compatible with standard trigonometric units like r...
Definition Adafruit_NeoPixel.h:318