36
36
__version__ = "0.0.0-auto.0"
37
37
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel.git"
38
38
39
+ # Pixel color order constants
40
+ RGB = (0 , 1 , 2 )
41
+ """Red Green Blue"""
42
+ GRB = (1 , 0 , 2 )
43
+ """Green Red Blue"""
44
+ RGBW = (0 , 1 , 2 , 3 )
45
+ """Red Green Blue White"""
46
+ GRBW = (1 , 0 , 2 , 3 )
47
+ """Green Red Blue White"""
48
+
39
49
class NeoPixel :
40
50
"""
41
51
A sequence of neopixels.
@@ -47,6 +57,7 @@ class NeoPixel:
47
57
brightness
48
58
:param bool auto_write: True if the neopixels should immediately change when set. If False,
49
59
`show` must be called explicitly.
60
+ :param tuple pixel_order: Set the pixel color channel order. GRBW is set by default.
50
61
51
62
Example for Circuit Playground Express:
52
63
@@ -76,13 +87,17 @@ class NeoPixel:
76
87
pixels[::2] = [RED] * (len(pixels) // 2)
77
88
time.sleep(2)
78
89
"""
79
- ORDER = (1 , 0 , 2 , 3 )
80
- def __init__ (self , pin , n , * , bpp = 3 , brightness = 1.0 , auto_write = True ):
90
+ def __init__ (self , pin , n , * , bpp = 3 , brightness = 1.0 , auto_write = True , pixel_order = None ):
81
91
self .pin = digitalio .DigitalInOut (pin )
82
92
self .pin .direction = digitalio .Direction .OUTPUT
83
93
self .n = n
84
- self .bpp = bpp
85
- self .buf = bytearray (n * bpp )
94
+ if pixel_order is None :
95
+ self .order = GRBW
96
+ self .bpp = bpp
97
+ else :
98
+ self .order = pixel_order
99
+ self .bpp = len (self .order )
100
+ self .buf = bytearray (self .n * self .bpp )
86
101
# Set auto_write to False temporarily so brightness setter does _not_
87
102
# call show() while in __init__.
88
103
self .auto_write = False
@@ -132,11 +147,11 @@ def _set_item(self, index, value):
132
147
r , g , b = value
133
148
else :
134
149
r , g , b , w = value
135
- self .buf [offset + self .ORDER [0 ]] = r
136
- self .buf [offset + self .ORDER [1 ]] = g
137
- self .buf [offset + self .ORDER [2 ]] = b
150
+ self .buf [offset + self .order [0 ]] = r
151
+ self .buf [offset + self .order [1 ]] = g
152
+ self .buf [offset + self .order [2 ]] = b
138
153
if self .bpp == 4 :
139
- self .buf [offset + self .ORDER [3 ]] = w
154
+ self .buf [offset + self .order [3 ]] = w
140
155
141
156
def __setitem__ (self , index , val ):
142
157
if isinstance (index , slice ):
@@ -158,15 +173,15 @@ def __getitem__(self, index):
158
173
if isinstance (index , slice ):
159
174
out = []
160
175
for in_i in range (* index .indices (len (self .buf ) // self .bpp )):
161
- out .append (tuple (self .buf [in_i * self .bpp + self .ORDER [i ]]
176
+ out .append (tuple (self .buf [in_i * self .bpp + self .order [i ]]
162
177
for i in range (self .bpp )))
163
178
return out
164
179
if index < 0 :
165
180
index += len (self )
166
181
if index >= self .n or index < 0 :
167
182
raise IndexError
168
183
offset = index * self .bpp
169
- return tuple (self .buf [offset + self .ORDER [i ]]
184
+ return tuple (self .buf [offset + self .order [i ]]
170
185
for i in range (self .bpp ))
171
186
172
187
def __len__ (self ):
0 commit comments