.. highlight:: cpp NeoPixel ======== The firmware can communicate with `WS2811 `_ powered NeoPixel strands. NeoPixel functions are defined in the `neopixel.h `_ header file. Strand Initialization --------------------- By default, the firmware does not allocate memory for NeoPixels. You will need to allocate memory for a strand by calling `mbl_mw_neopixel_init_slow_strand `_ or `mbl_mw_neopixel_init_fast_strand `_ depending on your strand's operating speed (fast = 800KHz, slow = 400KHz). When allocating memory, you also need to tell the firmware your strand's operating speed and color ordering. To free the allocated memory, call `mbl_mw_neopixel_free_strand `_. :: #include "metawear/peripheral/neopixel.h" void initialize_strand(MblMwMetaWearBoard* board) { uint8_t strand = 0, gpio_data_pin = 0; // allocate memory for a 30 pixel strand with a slow operating speed mbl_mw_neopixel_init_slow_strand(board, strand, gpio_data_pin, 30, MBL_MW_NP_WS2811_RGB); } Setting Colors -------------- The individual pixels of the strand are controlled with `mbl_mw_neopixel_set_color `_. The color is determine by the combination of RGB values. When setting the pixel colors, you can enable a hold with `mbl_mw_neopixel_set_color `_ so color changes are not applied until the hold is released by calling `mbl_mw_neopixel_disable_hold `_. :: #include "metawear/peripheral/neopixel.h" void color_strand(MblMwMetaWearBoard* board) { uint8_t strand = 0; mbl_mw_neopixel_enable_hold(board, strand); mbl_mw_neopixel_set_color(board, strand, 0, 255, 0, 0); mbl_mw_neopixel_set_color(board, strand, 1, 0, 255, 0); mbl_mw_neopixel_set_color(board, strand, 2, 0, 0, 255); mbl_mw_neopixel_disable_hold(board, strand); } Pattern Rotation ---------------- When you have a color pattern setup, you can rotate the pattern either indefinitely with `mbl_mw_neopixel_rotate_indefinitely `_ or for a fixed number of times using `mbl_mw_neopixel_rotate `_. Rotations can be manually terminated with `mbl_mw_neopixel_stop_rotation `_. :: #include "metawear/peripheral/neopixel.h" void rotate_strand(MblMwMetaWearBoard* board) { uint8_t strand = 0; // rotate the pattern indefinitely, trigger rotation every 250ms mbl_mw_neopixel_rotate_indefinitely(board, strand, 250, MBL_MW_NP_ROT_DIR_TOWARDS); }