Skip to content

Support brightness in RGBLED #92

Open
@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

No one assigned

    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