Skip to content

Commit

Permalink
M150 I to set Neopixel by index (MarlinFirmware#18490)
Browse files Browse the repository at this point in the history
  • Loading branch information
ellensp authored and Alexander Yasnogor committed Aug 7, 2020
1 parent 603b5d2 commit dbf1c22
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 10 deletions.
26 changes: 17 additions & 9 deletions Marlin/src/feature/leds/neopixel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#endif

Marlin_NeoPixel neo;
int8_t Marlin_NeoPixel::neoindex;

Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800)
#if MULTIPLE_NEOPIXEL_TYPES
Expand All @@ -52,14 +53,20 @@ Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIX
#endif

void Marlin_NeoPixel::set_color(const uint32_t color) {
for (uint16_t i = 0; i < pixels(); ++i) {
#ifdef NEOPIXEL_BKGD_LED_INDEX
if (i == NEOPIXEL_BKGD_LED_INDEX && color != 0x000000) {
set_color_background();
continue;
}
#endif
set_pixel_color(i, color);
if (get_neo_index() < 0) {
set_pixel_color(get_neo_index(), color);
set_neo_index(-1);
}
else {
for (uint16_t i = 0; i < pixels(); ++i) {
#ifdef NEOPIXEL_BKGD_LED_INDEX
if (i == NEOPIXEL_BKGD_LED_INDEX && color != 0x000000) {
set_color_background();
continue;
}
#endif
set_pixel_color(i, color);
}
}
show();
}
Expand All @@ -71,7 +78,8 @@ void Marlin_NeoPixel::set_color_startup(const uint32_t color) {
}

void Marlin_NeoPixel::init() {
set_brightness(NEOPIXEL_BRIGHTNESS); // 0 - 255 range
set_neo_index(-1); // -1 .. NEOPIXEL_PIXELS-1 range
set_brightness(NEOPIXEL_BRIGHTNESS); // 0 .. 255 range
begin();
show(); // initialize to all off

Expand Down
4 changes: 4 additions & 0 deletions Marlin/src/feature/leds/neopixel.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,17 @@ class Marlin_NeoPixel {
, adaneo2
#endif
;
static int8_t neoindex;

public:
static void init();
static void set_color_startup(const uint32_t c);

static void set_color(const uint32_t c);

FORCE_INLINE static void set_neo_index(const int8_t neoIndex) { neoindex = neoIndex; }
FORCE_INLINE static int8_t get_neo_index() { return neoindex; }

#ifdef NEOPIXEL_BKGD_LED_INDEX
static void set_color_background();
#endif
Expand Down
9 changes: 8 additions & 1 deletion Marlin/src/gcode/feature/leds/M150.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
* Always sets all 3 or 4 components. If a component is left out, set to 0.
* If brightness is left out, no value changed
*
* With NEOPIXEL_LED:
* I<index> Set the Neopixel index to affect. Default: All
*
* Examples:
*
* M150 R255 ; Turn LED red
Expand All @@ -43,8 +46,12 @@
* M150 W ; Turn LED white using a white LED
* M150 P127 ; Set LED 50% brightness
* M150 P ; Set LED full brightness
*/
* M150 I1 R ; Set NEOPIXEL index 1 to red
*/
void GcodeSuite::M150() {
#if ENABLED(NEOPIXEL_LED)
neo.set_neo_index(parser.intval('I', -1));
#endif
leds.set_color(MakeLEDColor(
parser.seen('R') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
parser.seen('U') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
Expand Down

0 comments on commit dbf1c22

Please sign in to comment.