Browse Source

M150 I to set Neopixel by index (#18490)

ellensp 5 years ago
parent
commit
91dc74ff16
No account linked to committer's email address

+ 17
- 9
Marlin/src/feature/leds/neopixel.cpp View File

35
 #endif
35
 #endif
36
 
36
 
37
 Marlin_NeoPixel neo;
37
 Marlin_NeoPixel neo;
38
+int8_t Marlin_NeoPixel::neoindex;
38
 
39
 
39
 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)
40
   #if MULTIPLE_NEOPIXEL_TYPES
41
   #if MULTIPLE_NEOPIXEL_TYPES
52
 #endif
53
 #endif
53
 
54
 
54
 void Marlin_NeoPixel::set_color(const uint32_t color) {
55
 void Marlin_NeoPixel::set_color(const uint32_t color) {
55
-  for (uint16_t i = 0; i < pixels(); ++i) {
56
-    #ifdef NEOPIXEL_BKGD_LED_INDEX
57
-      if (i == NEOPIXEL_BKGD_LED_INDEX && color != 0x000000) {
58
-        set_color_background();
59
-        continue;
60
-      }
61
-    #endif
62
-    set_pixel_color(i, color);
56
+  if (get_neo_index() < 0) { 
57
+    set_pixel_color(get_neo_index(), color);
58
+    set_neo_index(-1);
59
+  }
60
+  else { 
61
+    for (uint16_t i = 0; i < pixels(); ++i) {
62
+      #ifdef NEOPIXEL_BKGD_LED_INDEX
63
+        if (i == NEOPIXEL_BKGD_LED_INDEX && color != 0x000000) {
64
+          set_color_background();
65
+          continue;
66
+        }
67
+      #endif
68
+      set_pixel_color(i, color);
69
+    }
63
   }
70
   }
64
   show();
71
   show();
65
 }
72
 }
71
 }
78
 }
72
 
79
 
73
 void Marlin_NeoPixel::init() {
80
 void Marlin_NeoPixel::init() {
74
-  set_brightness(NEOPIXEL_BRIGHTNESS); // 0 - 255 range
81
+  set_neo_index(-1);                   // -1 .. NEOPIXEL_PIXELS-1 range
82
+  set_brightness(NEOPIXEL_BRIGHTNESS); //  0 .. 255 range
75
   begin();
83
   begin();
76
   show();  // initialize to all off
84
   show();  // initialize to all off
77
 
85
 

+ 4
- 0
Marlin/src/feature/leds/neopixel.h View File

65
       , adaneo2
65
       , adaneo2
66
     #endif
66
     #endif
67
   ;
67
   ;
68
+  static int8_t neoindex;
68
 
69
 
69
 public:
70
 public:
70
   static void init();
71
   static void init();
72
 
73
 
73
   static void set_color(const uint32_t c);
74
   static void set_color(const uint32_t c);
74
 
75
 
76
+  FORCE_INLINE static void set_neo_index(const int8_t neoIndex) { neoindex = neoIndex; }
77
+  FORCE_INLINE static int8_t get_neo_index() { return neoindex; }
78
+
75
   #ifdef NEOPIXEL_BKGD_LED_INDEX
79
   #ifdef NEOPIXEL_BKGD_LED_INDEX
76
     static void set_color_background();
80
     static void set_color_background();
77
   #endif
81
   #endif

+ 8
- 1
Marlin/src/gcode/feature/leds/M150.cpp View File

34
  * Always sets all 3 or 4 components. If a component is left out, set to 0.
34
  * Always sets all 3 or 4 components. If a component is left out, set to 0.
35
  *                                    If brightness is left out, no value changed
35
  *                                    If brightness is left out, no value changed
36
  *
36
  *
37
+ * With NEOPIXEL_LED:
38
+ *  I<index>  Set the Neopixel index to affect. Default: All
39
+ *
37
  * Examples:
40
  * Examples:
38
  *
41
  *
39
  *   M150 R255       ; Turn LED red
42
  *   M150 R255       ; Turn LED red
43
  *   M150 W          ; Turn LED white using a white LED
46
  *   M150 W          ; Turn LED white using a white LED
44
  *   M150 P127       ; Set LED 50% brightness
47
  *   M150 P127       ; Set LED 50% brightness
45
  *   M150 P          ; Set LED full brightness
48
  *   M150 P          ; Set LED full brightness
46
- */
49
+ *   M150 I1 R       ; Set NEOPIXEL index 1 to red
50
+ */  
47
 void GcodeSuite::M150() {
51
 void GcodeSuite::M150() {
52
+  #if ENABLED(NEOPIXEL_LED)
53
+    neo.set_neo_index(parser.intval('I', -1));
54
+  #endif
48
   leds.set_color(MakeLEDColor(
55
   leds.set_color(MakeLEDColor(
49
     parser.seen('R') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
56
     parser.seen('R') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
50
     parser.seen('U') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
57
     parser.seen('U') ? (parser.has_value() ? parser.value_byte() : 255) : 0,

Loading…
Cancel
Save