5
5
from neopixel_write import neopixel_write
6
6
7
7
class NeoPixel :
8
- def __init__ (self , pin , n ):
8
+ ORDER = (1 , 0 , 2 , 3 )
9
+ def __init__ (self , pin , n , bpp = 3 ):
9
10
self .pin = nativeio .DigitalInOut (pin )
10
11
self .n = n
11
- self .buf = bytearray (n * 3 )
12
+ self .bpp = bpp
13
+ self .buf = bytearray (n * bpp )
12
14
self .pin .switch_to_output ()
13
15
14
16
def __enter__ (self ):
@@ -18,21 +20,18 @@ def __exit__(self, exception_type, exception_value, traceback):
18
20
self .pin .deinit ()
19
21
20
22
def __setitem__ (self , index , val ):
21
- r , g , b = val
22
- self .buf [index * 3 ] = g
23
- self .buf [index * 3 + 1 ] = r
24
- self .buf [index * 3 + 2 ] = b
23
+ offset = index * self .bpp
24
+ for i in range (self .bpp ):
25
+ self .buf [offset + self .ORDER [i ]] = val [i ]
25
26
26
27
def __getitem__ (self , index ):
27
- i = index * 3
28
- return self .buf [i + 1 ], self .buf [i ], self .buf [i + 2 ]
28
+ offset = index * self .bpp
29
+ return tuple (self .buf [offset + self .ORDER [i ]]
30
+ for i in range (self .bpp ))
29
31
30
32
def fill (self , color ):
31
- r , g , b = color
32
- for i in range (len (self .buf ) / 3 ):
33
- self .buf [i * 3 ] = g
34
- self .buf [i * 3 + 1 ] = r
35
- self .buf [i * 3 + 2 ] = b
33
+ for i in range (self .n ):
34
+ self [i ] = color
36
35
37
36
def write (self ):
38
37
neopixel_write (self .pin , self .buf , True )
0 commit comments