diff --git a/neopixel.py b/neopixel.py index 71e52ea..ae3d134 100644 --- a/neopixel.py +++ b/neopixel.py @@ -229,14 +229,29 @@ class Neopixel: npix[15:21] = (255,0,0) # <- sets 16,17 .. 20 to red npix[21:29:2] = (0,0,255) # <- sets 21,23,25,27 to blue npix[1::2] = (0,0,0) # <- sets all odd pixels to 'off' + npix[:] = [(0,5,0),(0,5,0)] # <- replaces all pixels with those from the array (the 'slice' cases pass idx as a 'slice' object, and set_pixel processes the slice) :param idx: Index can either be indexing number or slice - :param rgb_w: Tuple of form (r, g, b) or (r, g, b, w) representing color to be used - :return: + :param rgb_w: Tuple (or list of tuples) of form (r, g, b) or (r, g, b, w) representing color to be used + :return: None """ - self.set_pixel(idx, rgb_w) + if type(rgb_w) is list: + # set some subset, if idx is a slice: + if type(idx) is slice: + for rgb_i, pixel_i in enumerate(range(*idx.indices(self.num_leds))): + self.set_pixel(pixel_i, rgb_w[rgb_i]) + else: + raise ValueError("Index must be a slice when setting multiple pixels as list") + else: + self.set_pixel(idx, rgb_w) + + def __len__(self): + return self.num_leds + + def __getitem__(self, idx): + return self.get_pixel(idx) def colorHSV(self, hue, sat, val): """ @@ -326,9 +341,9 @@ class Neopixel: cut = 8 if self.W_in_mode: cut = 0 - sm_put = self.sm.put - for pixval in self.pixels: - sm_put(pixval, cut) + + self.sm.put(self.pixels, cut) + time.sleep(self.delay) def fill(self, rgb_w, how_bright=None):