Skip to content

Commit a8e9975

Browse files
authored
Merge pull request #111 from tannewt/auto_power
Automatically turn on NEOPIXEL_POWER when using the NEOPIXEL pin
2 parents a58fce6 + 1db1ffd commit a8e9975

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

neopixel.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
"""
1414

1515
# pylint: disable=ungrouped-imports
16+
import sys
17+
import board
1618
import digitalio
1719
from neopixel_write import neopixel_write
1820

@@ -101,10 +103,22 @@ def __init__(
101103
):
102104
if not pixel_order:
103105
pixel_order = GRB if bpp == 3 else GRBW
104-
else:
105-
if isinstance(pixel_order, tuple):
106-
order_list = [RGBW[order] for order in pixel_order]
107-
pixel_order = "".join(order_list)
106+
elif isinstance(pixel_order, tuple):
107+
order_list = [RGBW[order] for order in pixel_order]
108+
pixel_order = "".join(order_list)
109+
110+
self._power = None
111+
if (
112+
sys.implementation.version[0] >= 7
113+
and getattr(board, "NEOPIXEL", None) == pin
114+
):
115+
power = getattr(board, "NEOPIXEL_POWER_INVERTED", None)
116+
polarity = power is None
117+
if not power:
118+
power = getattr(board, "NEOPIXEL_POWER", None)
119+
if power:
120+
self._power = digitalio.DigitalInOut(power)
121+
self._power.switch_to_output(value=polarity)
108122

109123
super().__init__(
110124
n, brightness=brightness, byteorder=pixel_order, auto_write=auto_write
@@ -118,6 +132,8 @@ def deinit(self):
118132
self.fill(0)
119133
self.show()
120134
self.pin.deinit()
135+
if self._power:
136+
self._power.deinit()
121137

122138
def __enter__(self):
123139
return self

0 commit comments

Comments
 (0)