From 5038cddfd54cf4b8484d10e7378fb2acd2b5f2ad Mon Sep 17 00:00:00 2001 From: ellensp Date: Sat, 15 Aug 2020 01:25:45 +1200 Subject: [PATCH] Add option to arrange Neopixel sets in series (#18992) --- Marlin/Configuration.h | 1 + Marlin/src/feature/leds/neopixel.cpp | 2 +- Marlin/src/feature/leds/neopixel.h | 27 ++++++++++++++++++++------- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 3b6155f969..a4b6c51ae5 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2354,6 +2354,7 @@ #define NEOPIXEL_PIN 4 // LED driving pin //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE //#define NEOPIXEL2_PIN 5 + #define NEOPIXEL2_INSERIES false // The default behaviour is 'false' with neopixel2 in parallel #define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip, larger of 2 strips if 2 neopixel strips are used #define NEOPIXEL_IS_SEQUENTIAL // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once. #define NEOPIXEL_BRIGHTNESS 127 // Initial brightness (0-255) diff --git a/Marlin/src/feature/leds/neopixel.cpp b/Marlin/src/feature/leds/neopixel.cpp index 5d80cfe5d2..520d4d63b2 100644 --- a/Marlin/src/feature/leds/neopixel.cpp +++ b/Marlin/src/feature/leds/neopixel.cpp @@ -38,7 +38,7 @@ 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 + #if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES) , Marlin_NeoPixel::adaneo2(NEOPIXEL_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE + NEO_KHZ800) #endif ; diff --git a/Marlin/src/feature/leds/neopixel.h b/Marlin/src/feature/leds/neopixel.h index 17057498d4..0155785e9a 100644 --- a/Marlin/src/feature/leds/neopixel.h +++ b/Marlin/src/feature/leds/neopixel.h @@ -61,7 +61,7 @@ class Marlin_NeoPixel { private: static Adafruit_NeoPixel adaneo1 - #if MULTIPLE_NEOPIXEL_TYPES + #if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES) , adaneo2 #endif ; @@ -82,23 +82,36 @@ public: static inline void begin() { adaneo1.begin(); - TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.begin()); + #if ENABLED(NEOPIXEL2_INSERIES) + adaneo2.begin(); + #else + TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.begin()); + #endif } static inline void set_pixel_color(const uint16_t n, const uint32_t c) { - adaneo1.setPixelColor(n, c); - TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.setPixelColor(n, c)); + #if ENABLED(NEOPIXEL2_INSERIES) + if (n >= NEOPIXEL_PIXELS) adaneo2.setPixelColor(n - (NEOPIXEL_PIXELS), c); + else adaneo1.setPixelColor(n, c); + #else + adaneo1.setPixelColor(n, c); + TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.setPixelColor(n, c)); + #endif } static inline void set_brightness(const uint8_t b) { adaneo1.setBrightness(b); - TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.setBrightness(b)); + #if ENABLED(NEOPIXEL2_INSERIES) + adaneo2.setBrightness(b); + #else + TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.setBrightness(b)); + #endif } static inline void show() { adaneo1.show(); #if PIN_EXISTS(NEOPIXEL2) - #if MULTIPLE_NEOPIXEL_TYPES + #if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES) adaneo2.show(); #else adaneo1.setPin(NEOPIXEL2_PIN); @@ -113,7 +126,7 @@ public: #endif // Accessors - static inline uint16_t pixels() { return adaneo1.numPixels(); } + static inline uint16_t pixels() { TERN(NEOPIXEL2_INSERIES, return adaneo1.numPixels() * 2, return adaneo1.numPixels()); } static inline uint8_t brightness() { return adaneo1.getBrightness(); } static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { return adaneo1.Color(r, g, b, w);