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
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions