from ..pwm import PWM
from typing import Union, List, Tuple, Optional
[Doku]
class RGB_LED():
"""Simple 3 pin RGB LED"""
ANODE = 1
"""Common anode"""
CATHODE = 0
"""Common cathode"""
def __init__(self, r_pin: PWM, g_pin: PWM, b_pin: PWM, common: int = 1):
"""
Initialize RGB LED
:param r_pin: PWM object for red
:type r_pin: fusion_hat.PWM
:param g_pin: PWM object for green
:type g_pin: fusion_hat.PWM
:param b_pin: PWM object for blue
:type b_pin: fusion_hat.PWM
:param common: RGB_LED.ANODE or RGB_LED.CATHODE, default is ANODE
:type common: int
:raise ValueError: if common is not ANODE or CATHODE
:raise TypeError: if r_pin, g_pin or b_pin is not PWM object
"""
if not isinstance(r_pin, PWM):
raise TypeError("r_pin must be fusion_hat.PWM object")
if not isinstance(g_pin, PWM):
raise TypeError("g_pin must be fusion_hat.PWM object")
if not isinstance(b_pin, PWM):
raise TypeError("b_pin must be fusion_hat.PWM object")
if common not in (self.ANODE, self.CATHODE):
raise ValueError("common must be RGB_LED.ANODE or RGB_LED.CATHODE")
self.r_pin = r_pin
self.g_pin = g_pin
self.b_pin = b_pin
self.common = common
[Doku]
def color(self, color: Union[str, Tuple[int, int, int], List[int], int]):
"""
Write color to RGB LED
:param color: color to write, hex string starts with "#", 24-bit int or tuple of (red, green, blue)
:type color: str/int/tuple/list
"""
if not isinstance(color, (str, int, tuple, list)):
raise TypeError("color must be str, int, tuple or list")
if isinstance(color, str):
color = color.strip("#")
color = int(color, 16)
if isinstance(color, (tuple, list)):
r, g, b = color
if isinstance(color, int):
r = (color & 0xff0000) >> 16
g = (color & 0x00ff00) >> 8
b = (color & 0x0000ff) >> 0
if self.common == self.ANODE:
r = 255-r
g = 255-g
b = 255-b
r = r / 255.0 * 100.0
g = g / 255.0 * 100.0
b = b / 255.0 * 100.0
self.r_pin.pulse_width_percent(r)
self.g_pin.pulse_width_percent(g)
self.b_pin.pulse_width_percent(b)