Skip to content

Support brightness in RGBLED #92

@liminspace

Description

@liminspace

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.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions