55from neopixel_write import neopixel_write
66
77class NeoPixel :
8- def __init__ (self , pin , n ):
8+ ORDER = (1 , 0 , 2 , 3 )
9+ def __init__ (self , pin , n , bpp = 3 ):
910 self .pin = nativeio .DigitalInOut (pin )
1011 self .n = n
11- self .buf = bytearray (n * 3 )
12+ self .bpp = bpp
13+ self .buf = bytearray (n * bpp )
1214 self .pin .switch_to_output ()
1315
1416 def __enter__ (self ):
@@ -18,21 +20,18 @@ def __exit__(self, exception_type, exception_value, traceback):
1820 self .pin .deinit ()
1921
2022 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 ]
2526
2627 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 ))
2931
3032 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
3635
3736 def write (self ):
3837 neopixel_write (self .pin , self .buf , True )
0 commit comments