Browse Source

Independent Neopixel option (#19115)

Zachary Annand 3 years ago
parent
commit
97ec6c1be6
No account linked to committer's email address

+ 11
- 2
Marlin/Configuration.h View File

2362
   #define NEOPIXEL_PIN     4       // LED driving pin
2362
   #define NEOPIXEL_PIN     4       // LED driving pin
2363
   //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
2363
   //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
2364
   //#define NEOPIXEL2_PIN    5
2364
   //#define NEOPIXEL2_PIN    5
2365
-  //#define NEOPIXEL2_INSERIES     // Default behavior is NeoPixel 2 in parallel
2366
-  #define NEOPIXEL_PIXELS 30       // Number of LEDs in the strip, larger of 2 strips if 2 NeoPixel strips are used
2365
+  #define NEOPIXEL_PIXELS 30       // Number of LEDs in the strip. (Longest strip when NEOPIXEL2_SEPARATE is disabled.)
2367
   #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
2366
   #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
2368
   #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
2367
   #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
2369
   //#define NEOPIXEL_STARTUP_TEST  // Cycle through colors at startup
2368
   //#define NEOPIXEL_STARTUP_TEST  // Cycle through colors at startup
2370
 
2369
 
2370
+  // Support for second Adafruit NeoPixel LED driver controlled with M150 S1 ...
2371
+  //#define NEOPIXEL2_SEPARATE
2372
+  #if ENABLED(NEOPIXEL2_SEPARATE)
2373
+    #define NEOPIXEL2_PIXELS      15  // Number of LEDs in the second strip
2374
+    #define NEOPIXEL2_BRIGHTNESS 127  // Initial brightness (0-255)
2375
+    #define NEOPIXEL2_STARTUP_TEST    // Cycle through colors at startup
2376
+  #else
2377
+    //#define NEOPIXEL2_INSERIES      // Default behavior is NeoPixel 2 in parallel
2378
+  #endif
2379
+
2371
   // Use a single NeoPixel LED for static (background) lighting
2380
   // Use a single NeoPixel LED for static (background) lighting
2372
   //#define NEOPIXEL_BKGD_LED_INDEX  0               // Index of the LED to use
2381
   //#define NEOPIXEL_BKGD_LED_INDEX  0               // Index of the LED to use
2373
   //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
2382
   //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W

+ 9
- 0
Marlin/Configuration_adv.h View File

1065
   //#define LED_CONTROL_MENU
1065
   //#define LED_CONTROL_MENU
1066
   #if ENABLED(LED_CONTROL_MENU)
1066
   #if ENABLED(LED_CONTROL_MENU)
1067
     #define LED_COLOR_PRESETS                 // Enable the Preset Color menu option
1067
     #define LED_COLOR_PRESETS                 // Enable the Preset Color menu option
1068
+    //#define NEO2_COLOR_PRESETS              // Enable a second NeoPixel Preset Color menu option
1068
     #if ENABLED(LED_COLOR_PRESETS)
1069
     #if ENABLED(LED_COLOR_PRESETS)
1069
       #define LED_USER_PRESET_RED        255  // User defined RED value
1070
       #define LED_USER_PRESET_RED        255  // User defined RED value
1070
       #define LED_USER_PRESET_GREEN      128  // User defined GREEN value
1071
       #define LED_USER_PRESET_GREEN      128  // User defined GREEN value
1073
       #define LED_USER_PRESET_BRIGHTNESS 255  // User defined intensity
1074
       #define LED_USER_PRESET_BRIGHTNESS 255  // User defined intensity
1074
       //#define LED_USER_PRESET_STARTUP       // Have the printer display the user preset color on startup
1075
       //#define LED_USER_PRESET_STARTUP       // Have the printer display the user preset color on startup
1075
     #endif
1076
     #endif
1077
+    #if ENABLED(NEO2_COLOR_PRESETS)
1078
+      #define NEO2_USER_PRESET_RED        255  // User defined RED value
1079
+      #define NEO2_USER_PRESET_GREEN      128  // User defined GREEN value
1080
+      #define NEO2_USER_PRESET_BLUE         0  // User defined BLUE value
1081
+      #define NEO2_USER_PRESET_WHITE      255  // User defined WHITE value
1082
+      #define NEO2_USER_PRESET_BRIGHTNESS 255  // User defined intensity
1083
+      //#define NEO2_USER_PRESET_STARTUP       // Have the printer display the user preset color on startup for the second strip
1084
+    #endif
1076
   #endif
1085
   #endif
1077
 
1086
 
1078
 #endif // HAS_LCD_MENU
1087
 #endif // HAS_LCD_MENU

+ 4
- 0
Marlin/src/MarlinCore.cpp View File

995
     SETUP_RUN(leds.setup());
995
     SETUP_RUN(leds.setup());
996
   #endif
996
   #endif
997
 
997
 
998
+  #if ENABLED(NEOPIXEL2_SEPARATE)
999
+    SETUP_RUN(leds2.setup());
1000
+  #endif
1001
+
998
   #if ENABLED(USE_CONTROLLER_FAN)     // Set up fan controller to initialize also the default configurations.
1002
   #if ENABLED(USE_CONTROLLER_FAN)     // Set up fan controller to initialize also the default configurations.
999
     SETUP_RUN(controllerFan.setup());
1003
     SETUP_RUN(controllerFan.setup());
1000
   #endif
1004
   #endif

+ 40
- 11
Marlin/src/feature/leds/leds.cpp View File

44
 
44
 
45
 #if ENABLED(LED_COLOR_PRESETS)
45
 #if ENABLED(LED_COLOR_PRESETS)
46
   const LEDColor LEDLights::defaultLEDColor = MakeLEDColor(
46
   const LEDColor LEDLights::defaultLEDColor = MakeLEDColor(
47
-    LED_USER_PRESET_RED,
48
-    LED_USER_PRESET_GREEN,
49
-    LED_USER_PRESET_BLUE,
50
-    LED_USER_PRESET_WHITE,
51
-    LED_USER_PRESET_BRIGHTNESS
47
+    LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE,
48
+    LED_USER_PRESET_WHITE, LED_USER_PRESET_BRIGHTNESS
52
   );
49
   );
53
 #endif
50
 #endif
54
 
51
 
117
 
114
 
118
     // This variant uses 3-4 separate pins for the RGB(W) components.
115
     // This variant uses 3-4 separate pins for the RGB(W) components.
119
     // If the pins can do PWM then their intensity will be set.
116
     // If the pins can do PWM then their intensity will be set.
120
-    #define UPDATE_RGBW(C,c) do { if (PWM_PIN(RGB_LED_##C##_PIN)) \
117
+    #define UPDATE_RGBW(C,c) do {                       \
118
+      if (PWM_PIN(RGB_LED_##C##_PIN))                   \
121
         analogWrite(pin_t(RGB_LED_##C##_PIN), incol.c); \
119
         analogWrite(pin_t(RGB_LED_##C##_PIN), incol.c); \
122
-      else WRITE(RGB_LED_##C##_PIN, incol.c ? HIGH : LOW); }while(0)
123
-    UPDATE_RGBW(R,r);
124
-    UPDATE_RGBW(G,g);
125
-    UPDATE_RGBW(B,b);
120
+      else                                              \
121
+        WRITE(RGB_LED_##C##_PIN, incol.c ? HIGH : LOW); \
122
+    }while(0)
123
+    UPDATE_RGBW(R,r); UPDATE_RGBW(G,g); UPDATE_RGBW(B,b);
126
     #if ENABLED(RGBW_LED)
124
     #if ENABLED(RGBW_LED)
127
       UPDATE_RGBW(W,w);
125
       UPDATE_RGBW(W,w);
128
     #endif
126
     #endif
158
 
156
 
159
 #endif
157
 #endif
160
 
158
 
161
-#endif // HAS_COLOR_LEDS
159
+#if ENABLED(NEOPIXEL2_SEPARATE)
160
+
161
+  #if ENABLED(NEO2_COLOR_PRESETS)
162
+    const LEDColor LEDLights2::defaultLEDColor = MakeLEDColor(
163
+      NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE,
164
+      NEO2_USER_PRESET_WHITE, NEO2_USER_PRESET_BRIGHTNESS
165
+    );
166
+  #endif
167
+
168
+  #if ENABLED(LED_CONTROL_MENU)
169
+    LEDColor LEDLights2::color;
170
+    bool LEDLights2::lights_on;
171
+  #endif
172
+
173
+  LEDLights2 leds2;
174
+
175
+  void LEDLights2::setup() {
176
+    neo2.init();
177
+    TERN_(NEO2_USER_PRESET_STARTUP, set_default());
178
+  }
179
+
180
+  void LEDLights2::set_color(const LEDColor &incol) {
181
+    const uint32_t neocolor = LEDColorWhite() == incol
182
+                            ? neo2.Color(NEO2_WHITE)
183
+                            : neo2.Color(incol.r, incol.g, incol.b, incol.w);
184
+    neo2.set_brightness(incol.i);
185
+    neo2.set_color(neocolor);
186
+  }
187
+
188
+#endif  // NEOPIXEL2_SEPARATE
189
+
190
+#endif  // HAS_COLOR_LEDS

+ 42
- 3
Marlin/src/feature/leds/leds.h View File

155
   static inline void set_color(uint8_t r, uint8_t g, uint8_t b
155
   static inline void set_color(uint8_t r, uint8_t g, uint8_t b
156
     #if HAS_WHITE_LED
156
     #if HAS_WHITE_LED
157
       , uint8_t w=0
157
       , uint8_t w=0
158
-      #if ENABLED(NEOPIXEL_LED)
159
-        , uint8_t i=NEOPIXEL_BRIGHTNESS
160
-      #endif
161
     #endif
158
     #endif
162
     #if ENABLED(NEOPIXEL_LED)
159
     #if ENABLED(NEOPIXEL_LED)
160
+      , uint8_t i=NEOPIXEL_BRIGHTNESS
163
       , bool isSequence=false
161
       , bool isSequence=false
164
     #endif
162
     #endif
165
   ) {
163
   ) {
212
 };
210
 };
213
 
211
 
214
 extern LEDLights leds;
212
 extern LEDLights leds;
213
+
214
+#if ENABLED(NEOPIXEL2_SEPARATE)
215
+
216
+  class LEDLights2 {
217
+  public:
218
+    LEDLights2() {}
219
+
220
+    static void setup(); // init()
221
+
222
+    static void set_color(const LEDColor &color);
223
+
224
+    inline void set_color(uint8_t r, uint8_t g, uint8_t b, uint8_t w=0, uint8_t i=NEOPIXEL2_BRIGHTNESS) {
225
+      set_color(MakeLEDColor(r, g, b, w, i));
226
+    }
227
+
228
+    static inline void set_off()   { set_color(LEDColorOff()); }
229
+    static inline void set_green() { set_color(LEDColorGreen()); }
230
+    static inline void set_white() { set_color(LEDColorWhite()); }
231
+
232
+    #if ENABLED(NEO2_COLOR_PRESETS)
233
+      static const LEDColor defaultLEDColor;
234
+      static inline void set_default()  { set_color(defaultLEDColor); }
235
+      static inline void set_red()      { set_color(LEDColorRed()); }
236
+      static inline void set_orange()   { set_color(LEDColorOrange()); }
237
+      static inline void set_yellow()   { set_color(LEDColorYellow()); }
238
+      static inline void set_blue()     { set_color(LEDColorBlue()); }
239
+      static inline void set_indigo()   { set_color(LEDColorIndigo()); }
240
+      static inline void set_violet()   { set_color(LEDColorViolet()); }
241
+    #endif
242
+
243
+    #if ENABLED(LED_CONTROL_MENU)
244
+      static LEDColor color; // last non-off color
245
+      static bool lights_on; // the last set color was "on"
246
+      static void toggle();  // swap "off" with color
247
+      static inline void update() { set_color(color); }
248
+    #endif
249
+  };
250
+
251
+  extern LEDLights2 leds2;
252
+
253
+#endif // NEOPIXEL2_SEPARATE

+ 51
- 2
Marlin/src/feature/leds/neopixel.cpp View File

30
 
30
 
31
 #include "neopixel.h"
31
 #include "neopixel.h"
32
 
32
 
33
-#if ENABLED(NEOPIXEL_STARTUP_TEST)
33
+#if EITHER(NEOPIXEL_STARTUP_TEST, NEOPIXEL2_STARTUP_TEST)
34
   #include "../../core/utility.h"
34
   #include "../../core/utility.h"
35
 #endif
35
 #endif
36
 
36
 
38
 int8_t Marlin_NeoPixel::neoindex;
38
 int8_t Marlin_NeoPixel::neoindex;
39
 
39
 
40
 Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800)
40
 Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800)
41
-  #if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES)
41
+  #if CONJOINED_NEOPIXEL
42
     , Marlin_NeoPixel::adaneo2(NEOPIXEL_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE + NEO_KHZ800)
42
     , Marlin_NeoPixel::adaneo2(NEOPIXEL_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE + NEO_KHZ800)
43
   #endif
43
   #endif
44
 ;
44
 ;
120
 }
120
 }
121
 #endif
121
 #endif
122
 
122
 
123
+#if ENABLED(NEOPIXEL2_SEPARATE)
124
+
125
+  Marlin_NeoPixel2 neo2;
126
+
127
+  int8_t Marlin_NeoPixel2::neoindex;
128
+  Adafruit_NeoPixel Marlin_NeoPixel2::adaneo(NEOPIXEL2_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE);
129
+
130
+  void Marlin_NeoPixel2::set_color(const uint32_t color) {
131
+    if (neoindex >= 0) {
132
+      set_pixel_color(neoindex, color);
133
+      neoindex = -1;
134
+    }
135
+    else {
136
+      for (uint16_t i = 0; i < pixels(); ++i)
137
+        set_pixel_color(i, color);
138
+    }
139
+    show();
140
+  }
141
+
142
+  void Marlin_NeoPixel2::set_color_startup(const uint32_t color) {
143
+    for (uint16_t i = 0; i < pixels(); ++i)
144
+      set_pixel_color(i, color);
145
+    show();
146
+  }
147
+
148
+  void Marlin_NeoPixel2::init() {
149
+    neoindex = -1;                        // -1 .. NEOPIXEL2_PIXELS-1 range
150
+    set_brightness(NEOPIXEL2_BRIGHTNESS); //  0 .. 255 range
151
+    begin();
152
+    show();  // initialize to all off
153
+
154
+    #if ENABLED(NEOPIXEL2_STARTUP_TEST)
155
+      set_color_startup(adaneo.Color(255, 0, 0, 0));  // red
156
+      safe_delay(500);
157
+      set_color_startup(adaneo.Color(0, 255, 0, 0));  // green
158
+      safe_delay(500);
159
+      set_color_startup(adaneo.Color(0, 0, 255, 0));  // blue
160
+      safe_delay(500);
161
+    #endif
162
+
163
+    #if ENABLED(NEO2_USER_PRESET_STARTUP)
164
+      set_color(adaneo.Color(NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE, NEO2_USER_PRESET_WHITE));
165
+    #else
166
+      set_color(adaneo.Color(0, 0, 0, 0));
167
+    #endif
168
+  }
169
+
170
+#endif // NEOPIXEL2_SEPARATE
171
+
123
 #endif // NEOPIXEL_LED
172
 #endif // NEOPIXEL_LED

+ 56
- 14
Marlin/src/feature/leds/neopixel.h View File

38
 // Defines
38
 // Defines
39
 // ------------------------
39
 // ------------------------
40
 
40
 
41
-#if defined(NEOPIXEL2_TYPE) && NEOPIXEL2_TYPE != NEOPIXEL_TYPE
41
+#if defined(NEOPIXEL2_TYPE) && NEOPIXEL2_TYPE != NEOPIXEL_TYPE && DISABLED(NEOPIXEL2_SEPARATE)
42
   #define MULTIPLE_NEOPIXEL_TYPES 1
42
   #define MULTIPLE_NEOPIXEL_TYPES 1
43
 #endif
43
 #endif
44
 
44
 
45
+#if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES)
46
+  #define CONJOINED_NEOPIXEL 1
47
+#endif
48
+
45
 #if NEOPIXEL_TYPE == NEO_RGB || NEOPIXEL_TYPE == NEO_RBG || NEOPIXEL_TYPE == NEO_GRB || NEOPIXEL_TYPE == NEO_GBR || NEOPIXEL_TYPE == NEO_BRG || NEOPIXEL_TYPE == NEO_BGR
49
 #if NEOPIXEL_TYPE == NEO_RGB || NEOPIXEL_TYPE == NEO_RBG || NEOPIXEL_TYPE == NEO_GRB || NEOPIXEL_TYPE == NEO_GBR || NEOPIXEL_TYPE == NEO_BRG || NEOPIXEL_TYPE == NEO_BGR
46
   #define NEOPIXEL_IS_RGB 1
50
   #define NEOPIXEL_IS_RGB 1
47
 #else
51
 #else
61
 class Marlin_NeoPixel {
65
 class Marlin_NeoPixel {
62
 private:
66
 private:
63
   static Adafruit_NeoPixel adaneo1
67
   static Adafruit_NeoPixel adaneo1
64
-    #if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES)
68
+    #if CONJOINED_NEOPIXEL
65
       , adaneo2
69
       , adaneo2
66
     #endif
70
     #endif
67
   ;
71
   ;
80
 
84
 
81
   static inline void begin() {
85
   static inline void begin() {
82
     adaneo1.begin();
86
     adaneo1.begin();
83
-    #if ENABLED(NEOPIXEL2_INSERIES)
84
-      adaneo2.begin();
85
-    #else
86
-      TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.begin());
87
-    #endif
87
+    TERN_(CONJOINED_NEOPIXEL, adaneo2.begin());
88
   }
88
   }
89
 
89
 
90
   static inline void set_pixel_color(const uint16_t n, const uint32_t c) {
90
   static inline void set_pixel_color(const uint16_t n, const uint32_t c) {
93
       else adaneo1.setPixelColor(n, c);
93
       else adaneo1.setPixelColor(n, c);
94
     #else
94
     #else
95
       adaneo1.setPixelColor(n, c);
95
       adaneo1.setPixelColor(n, c);
96
-      TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.setPixelColor(n, c));
96
+      #if MULTIPLE_NEOPIXEL_TYPES
97
+        adaneo2.setPixelColor(n, c);
98
+      #endif
97
     #endif
99
     #endif
98
   }
100
   }
99
 
101
 
100
   static inline void set_brightness(const uint8_t b) {
102
   static inline void set_brightness(const uint8_t b) {
101
     adaneo1.setBrightness(b);
103
     adaneo1.setBrightness(b);
102
-    #if ENABLED(NEOPIXEL2_INSERIES)
103
-      adaneo2.setBrightness(b);
104
-    #else
105
-      TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.setBrightness(b));
106
-    #endif
104
+    TERN_(CONJOINED_NEOPIXEL, adaneo2.setBrightness(b));
107
   }
105
   }
108
 
106
 
109
   static inline void show() {
107
   static inline void show() {
110
     adaneo1.show();
108
     adaneo1.show();
111
     #if PIN_EXISTS(NEOPIXEL2)
109
     #if PIN_EXISTS(NEOPIXEL2)
112
-      #if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES)
110
+      #if CONJOINED_NEOPIXEL
113
         adaneo2.show();
111
         adaneo2.show();
114
       #else
112
       #else
115
         adaneo1.setPin(NEOPIXEL2_PIN);
113
         adaneo1.setPin(NEOPIXEL2_PIN);
132
 };
130
 };
133
 
131
 
134
 extern Marlin_NeoPixel neo;
132
 extern Marlin_NeoPixel neo;
133
+
134
+// Neo pixel channel 2
135
+#if ENABLED(NEOPIXEL2_SEPARATE)
136
+  
137
+  #if NEOPIXEL2_TYPE == NEO_RGB || NEOPIXEL2_TYPE == NEO_RBG || NEOPIXEL2_TYPE == NEO_GRB || NEOPIXEL2_TYPE == NEO_GBR || NEOPIXEL2_TYPE == NEO_BRG || NEOPIXEL2_TYPE == NEO_BGR
138
+    #define NEOPIXEL2_IS_RGB 1
139
+  #else
140
+    #define NEOPIXEL2_IS_RGBW 1
141
+  #endif
142
+
143
+  #if NEOPIXEL2_IS_RGB
144
+    #define NEO2_WHITE 255, 255, 255, 0
145
+  #else
146
+    #define NEO2_WHITE 0, 0, 0, 255
147
+  #endif
148
+
149
+  class Marlin_NeoPixel2 {
150
+  private:
151
+    static Adafruit_NeoPixel adaneo;
152
+
153
+  public:
154
+    static int8_t neoindex;
155
+
156
+    static void init();
157
+    static void set_color_startup(const uint32_t c);
158
+
159
+    static void set_color(const uint32_t c);
160
+
161
+    static inline void begin() { adaneo.begin(); }
162
+    static inline void set_pixel_color(const uint16_t n, const uint32_t c) { adaneo.setPixelColor(n, c); }
163
+    static inline void set_brightness(const uint8_t b) { adaneo.setBrightness(b); }
164
+    static inline void show() { adaneo.show(); }
165
+
166
+    // Accessors
167
+    static inline uint16_t pixels() { return adaneo.numPixels();}
168
+    static inline uint8_t brightness() { return adaneo.getBrightness(); }
169
+    static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
170
+      return adaneo.Color(r, g, b, w);
171
+    }
172
+  };
173
+
174
+  extern Marlin_NeoPixel2 neo2;
175
+
176
+#endif // NEOPIXEL2_SEPARATE

+ 24
- 4
Marlin/src/gcode/feature/leds/M150.cpp View File

37
  * With NEOPIXEL_LED:
37
  * With NEOPIXEL_LED:
38
  *  I<index>  Set the NeoPixel index to affect. Default: All
38
  *  I<index>  Set the NeoPixel index to affect. Default: All
39
  *
39
  *
40
+ * With NEOPIXEL2_SEPARATE:
41
+ *  S<index>  The NeoPixel strip to set. Default is index 0.
42
+ *
40
  * Examples:
43
  * Examples:
41
  *
44
  *
42
  *   M150 R255       ; Turn LED red
45
  *   M150 R255       ; Turn LED red
47
  *   M150 P127       ; Set LED 50% brightness
50
  *   M150 P127       ; Set LED 50% brightness
48
  *   M150 P          ; Set LED full brightness
51
  *   M150 P          ; Set LED full brightness
49
  *   M150 I1 R       ; Set NEOPIXEL index 1 to red
52
  *   M150 I1 R       ; Set NEOPIXEL index 1 to red
53
+ *   M150 S1 I1 R    ; Set SEPARATE index 1 to red
50
  */
54
  */
55
+
51
 void GcodeSuite::M150() {
56
 void GcodeSuite::M150() {
52
   #if ENABLED(NEOPIXEL_LED)
57
   #if ENABLED(NEOPIXEL_LED)
53
-    neo.neoindex = parser.intval('I', -1);
58
+    const uint8_t index = parser.intval('I', -1);
59
+    #if ENABLED(NEOPIXEL2_SEPARATE)
60
+      const uint8_t unit = parser.intval('S'),
61
+                    brightness = unit ? neo2.brightness() : neo.brightness();
62
+      *(unit ? &neo2.neoindex : &neo.neoindex) = index;
63
+    #else
64
+      const uint8_t brightness = neo.brightness();
65
+      neo.neoindex = index;
66
+    #endif
54
   #endif
67
   #endif
55
-  leds.set_color(MakeLEDColor(
68
+
69
+  const LEDColor color = MakeLEDColor(
56
     parser.seen('R') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
70
     parser.seen('R') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
57
     parser.seen('U') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
71
     parser.seen('U') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
58
     parser.seen('B') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
72
     parser.seen('B') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
59
     parser.seen('W') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
73
     parser.seen('W') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
60
-    parser.seen('P') ? (parser.has_value() ? parser.value_byte() : 255) : neo.brightness()
61
-  ));
74
+    parser.seen('P') ? (parser.has_value() ? parser.value_byte() : 255) : brightness
75
+  );
76
+
77
+  #if ENABLED(NEOPIXEL2_SEPARATE)
78
+    if (unit == 1) { leds2.set_color(color); return; }
79
+  #endif
80
+
81
+  leds.set_color(color);
62
 }
82
 }
63
 
83
 
64
 #endif // HAS_COLOR_LEDS
84
 #endif // HAS_COLOR_LEDS

+ 5
- 0
Marlin/src/inc/Conditionals_LCD.h View File

780
 #ifndef EXTRUDE_MINTEMP
780
 #ifndef EXTRUDE_MINTEMP
781
   #define EXTRUDE_MINTEMP 170
781
   #define EXTRUDE_MINTEMP 170
782
 #endif
782
 #endif
783
+
784
+// This flag indicates if Neopixel pins are shared or separated  
785
+#if EITHER(MULTIPLE_NEOPIXEL_TYPES, NEOPIXEL2_INSERIES)
786
+  #define CONJOINED_NEOPIXEL 1
787
+#endif

+ 22
- 0
Marlin/src/inc/Conditionals_adv.h View File

246
   #endif
246
   #endif
247
 #endif
247
 #endif
248
 
248
 
249
+#if BOTH(LED_CONTROL_MENU, NEOPIXEL2_SEPARATE)
250
+  #ifndef LED2_USER_PRESET_RED
251
+    #define LED2_USER_PRESET_RED       255
252
+  #endif
253
+  #ifndef LED2_USER_PRESET_GREEN
254
+    #define LED2_USER_PRESET_GREEN     255
255
+  #endif
256
+  #ifndef LED2_USER_PRESET_BLUE
257
+    #define LED2_USER_PRESET_BLUE      255
258
+  #endif
259
+  #ifndef LED2_USER_PRESET_WHITE
260
+    #define LED2_USER_PRESET_WHITE     0
261
+  #endif
262
+  #ifndef LED2_USER_PRESET_BRIGHTNESS
263
+    #ifdef NEOPIXEL2_BRIGHTNESS
264
+      #define LED2_USER_PRESET_BRIGHTNESS NEOPIXEL2_BRIGHTNESS
265
+    #else
266
+      #define LED2_USER_PRESET_BRIGHTNESS 255
267
+    #endif
268
+  #endif
269
+#endif
270
+
249
 // If platform requires early initialization of watchdog to properly boot
271
 // If platform requires early initialization of watchdog to properly boot
250
 #if ENABLED(USE_WATCHDOG) && defined(ARDUINO_ARCH_SAM)
272
 #if ENABLED(USE_WATCHDOG) && defined(ARDUINO_ARCH_SAM)
251
   #define EARLY_WATCHDOG 1
273
   #define EARLY_WATCHDOG 1

+ 5
- 0
Marlin/src/inc/SanityCheck.h View File

2120
   #if !(PIN_EXISTS(NEOPIXEL) && NEOPIXEL_PIXELS > 0)
2120
   #if !(PIN_EXISTS(NEOPIXEL) && NEOPIXEL_PIXELS > 0)
2121
     #error "NEOPIXEL_LED requires NEOPIXEL_PIN and NEOPIXEL_PIXELS."
2121
     #error "NEOPIXEL_LED requires NEOPIXEL_PIN and NEOPIXEL_PIXELS."
2122
   #endif
2122
   #endif
2123
+  #elif ENABLED(NEOPIXEL2_SEPARATE)
2124
+   #if !(PIN_EXISTS(NEOPIXEL2) && NEOPIXEL2_PIXELS > 0)
2125
+    #error "NEOPIXEL2 requires NEOPIXEL2_PIN and NEOPIXEL2_PIXELS."
2126
+  #endif
2123
 #endif
2127
 #endif
2128
+
2124
 #undef _RGB_TEST
2129
 #undef _RGB_TEST
2125
 
2130
 
2126
 #if DISABLED(NO_COMPILE_TIME_PWM)
2131
 #if DISABLED(NO_COMPILE_TIME_PWM)

Loading…
Cancel
Save