diff --git a/components/micropython/usermodule/mp_leds.c b/components/micropython/usermodule/mp_leds.c index bad16865a1af0fcf90a6c21ba424f8ca4cb1386e..68880e7f5672152a54842f5c62623e54b1f5b371 100644 --- a/components/micropython/usermodule/mp_leds.c +++ b/components/micropython/usermodule/mp_leds.c @@ -60,9 +60,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_leds_get_slew_rate_obj, STATIC mp_obj_t mp_led_set_rgb(size_t n_args, const mp_obj_t *args) { uint8_t index = mp_obj_get_int(args[0]); - uint8_t red = mp_obj_get_int(args[1]); - uint8_t green = mp_obj_get_int(args[2]); - uint8_t blue = mp_obj_get_int(args[3]); + float red = mp_obj_get_float(args[1]); + float green = mp_obj_get_float(args[2]); + float blue = mp_obj_get_float(args[3]); + st3m_leds_set_single_rgb(index, red, green, blue); return mp_const_none; } @@ -81,9 +82,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_led_set_hsv_obj, 4, 4, mp_led_set_hsv); STATIC mp_obj_t mp_led_set_all_rgb(mp_obj_t r, mp_obj_t g, mp_obj_t b) { - uint8_t red = mp_obj_get_int(r); - uint8_t green = mp_obj_get_int(g); - uint8_t blue = mp_obj_get_int(b); + float red = mp_obj_get_float(r); + float green = mp_obj_get_float(g); + float blue = mp_obj_get_float(b); st3m_leds_set_all_rgb(red, green, blue); return mp_const_none; } diff --git a/components/st3m/st3m_leds.c b/components/st3m/st3m_leds.c index 6b77164d152b50b1fc780826ea147838572a1bb2..b55ed3bf015480d902bbf5630891f159e4eadf39 100644 --- a/components/st3m/st3m_leds.c +++ b/components/st3m/st3m_leds.c @@ -105,12 +105,17 @@ void st3m_leds_update_hardware() { } } -void st3m_leds_set_single_rgb(uint8_t index, uint8_t red, uint8_t green, - uint8_t blue) { +void st3m_leds_set_single_rgb(uint8_t index, float red, float green, + float blue) { + + if (red > 1.0) red /= 255.0; + if (green > 1.0) green /= 255.0; + if (blue > 1.0) blue /= 255.0; + LOCK_INCOMING; - state.target_buffer[index].r = red; - state.target_buffer[index].g = green; - state.target_buffer[index].b = blue; + state.target_buffer[index].r = (uint8_t) (red * 255); + state.target_buffer[index].g = (uint8_t) (green * 255); + state.target_buffer[index].b = (uint8_t) (blue * 255); UNLOCK_INCOMING; } @@ -125,7 +130,7 @@ void st3m_leds_set_single_hsv(uint8_t index, float hue, float sat, float val) { UNLOCK_INCOMING; } -void st3m_leds_set_all_rgb(uint8_t red, uint8_t green, uint8_t blue) { +void st3m_leds_set_all_rgb(float red, float green, float blue) { for (int i = 0; i < 40; i++) { st3m_leds_set_single_rgb(i, red, green, blue); } diff --git a/components/st3m/st3m_leds.h b/components/st3m/st3m_leds.h index 3f844d7ef47b6247e8e765fda0b83fa3148394b4..10b817f5a4c430b7af9d9373dff798504c29b037 100644 --- a/components/st3m/st3m_leds.h +++ b/components/st3m/st3m_leds.h @@ -23,10 +23,10 @@ void st3m_leds_init(); // // After you're ready setting up your blink, call st3m_leds_update, or enable // autoupdates. -void st3m_leds_set_single_rgb(uint8_t index, uint8_t red, uint8_t green, - uint8_t blue); +void st3m_leds_set_single_rgb(uint8_t index, float red, float green, + float blue); void st3m_leds_set_single_hsv(uint8_t index, float hue, float sat, float value); -void st3m_leds_set_all_rgb(uint8_t red, uint8_t green, uint8_t blue); +void st3m_leds_set_all_rgb(float red, float green, float blue); void st3m_leds_set_all_hsv(float hue, float sat, float value); // Set/get global LED brightness, 0-255. Default 69. diff --git a/python_payload/mypystubs/leds.pyi b/python_payload/mypystubs/leds.pyi index 0a1151af2964dc46aabbaa6ad2006a1e5ff162eb..c6febb771e4226117614986335bc0310a1731dd7 100644 --- a/python_payload/mypystubs/leds.pyi +++ b/python_payload/mypystubs/leds.pyi @@ -8,13 +8,13 @@ There are 8 LEDs per top petal, or 4 LEDs per petal. After you're ready setting up your blink, call update(), or enable autoupdates. """ -def set_rgb(ix: int, r: int, g: int, b: int) -> None: +def set_rgb(ix: int, r: float, g: float, b: float) -> None: """Set LED `ix` to rgb value r, g, b :param ix: LED index, from 0 to 39 - :param r: Red value, from 0 to 255 - :param g: Green value, from 0 to 255 - :param b: Blue value, from 0 to 255 + :param r: Red value, from 0.0 to 1.0 + :param g: Green value, from 0.0 to 1.0 + :param b: Blue value, from 0.0 to 1.0 """ def set_hsv(ix: int, hue: float, sat: float, val: float) -> None: @@ -26,12 +26,12 @@ def set_hsv(ix: int, hue: float, sat: float, val: float) -> None: :param val: Value, from 0.0 to 1.0 """ -def set_all_rgb(r: int, g: int, b: int) -> None: +def set_all_rgb(r: float, g: float, b: float) -> None: """Set all LEDs to rgb value r, g, b - :param r: Red value, from 0 to 255 - :param g: Green value, from 0 to 255 - :param b: Blue value, from 0 to 255 + :param r: Red value, from 0.0 to 1.0 + :param g: Green value, from 0.0 to 1.0 + :param b: Blue value, from 0.0 to 1.0 """ def set_all_hsv(h: float, s: float, v: float) -> None: