Open
Description
It would be nice to support brightness for RGBLED.
I implemented it as possible fourth item of a color value.
class RGBLED(OutputDevice, PinsMixin):
def __init__(
self, red=None, green=None, blue=None, active_high=True, initial_value=(0, 0, 0), pwm=True
):
...
super().__init__(active_high, self._apply_brightness(initial_value))
def _apply_brightness(self, value):
if isinstance(value, tuple) and len(value) == 4:
brightness = value[3]
value = tuple(v * brightness for v in value[:3])
return value
@value.setter
def value(self, value):
self._stop_change()
self._write(self._apply_brightness(value))
@color.setter
def color(self, value):
if len(value) == 4:
self.value = tuple(self._from_255(v) for v in value[:3]) + (value[3],)
else:
self.value = tuple(self._from_255(v) for v in value)
for example:
rgbled.color = (255, 200, 50, 0.5)
The range of brightness must be 0.0...1.0.
I use it in my project and I see it to be quite useful.
It can be implemented better, like using some logarithmic curve for percentage/brightness, but for most cases it's not so important.