@Werewolfe
Погромист и любитель Linux

Как реализовать плавную смену значений цвета RGB свтодиода?

Здравствуйте!
Подскажите пожалуйста каким образом правильно организовать плавную передачу цвета светодиоду.
На данный момент реализовано так, что i берёт значения из кортежа, передаёт их в ленту и засыпает на N времени. Однако, таким образом получается не плавная смена цвета, хочется добиться плавности. Меняются значения только G,B.
Значения увеличиваются до середины дня, затем уменьшаются.
Изменение значений за шаг

G B
0 0
6 0
6 0
5 0
5 0
6 18
5 15
5 11
5 10
5 9
4 9
4 7
4 8
4 7
4 7
3 6
4 7
3 6
3 6
3 6
3 5
3 6
2 5
3 5
2 6
3 4
2 5
2 5
2 4
2 5
2 4
2 4
2 4
2 4
2 4
1 4
2 4
2 3
1 4
2 3


Текущий Код
light_color_list = ((255, 109, 0),  #R, G, B 
                    (255, 115, 0),
                    (255, 121, 0),
                    (255, 126, 0),
                    (255, 131, 0),
                    (255, 137, 18),
                    (255, 142, 33),
                    (255, 147, 44),
                    (255, 152, 54),
                    (255, 157, 63),
                    (255, 161, 72),
                    (255, 165, 79),
                    (255, 169, 87),
                    (255, 173, 94),
                    (255, 177, 101),
                    (255, 180, 107),
                    (255, 184, 114),
                    (255, 187, 120),
                    (255, 190, 126),
                    (255, 193, 132),
                    (255, 196, 137),
                    (255, 199, 143),
                    (255, 201, 148),
                    (255, 204, 153),
                    (255, 206, 159),
                    (255, 209, 163),
                    (255, 211, 168),
                    (255, 213, 173),
                    (255, 215, 177),
                    (255, 217, 182),
                    (255, 219, 186),
                    (255, 221, 190),
                    (255, 223, 194),
                    (255, 225, 198),
                    (255, 227, 202),
                    (255, 228, 206),
                    (255, 230, 210),
                    (255, 232, 213),
                    (255, 233, 217),
                    (255, 235, 220))
def sunset(count, timer):
''' Часть кода намеренно пропущена ''' 
    sleep = (day_length - sec) // len(light_color_list) # Время рассчитывается исходя из длинны дня (может быть разная в зависимости от координат заданных. 
    while i < parts + 1:
        led(light_color_list[i])
        i += 1
        time.sleep_ms(sleep)

Как это ещё возможно сделать?
Желательно без сторонних библиотек так как код на micropython
Надеюсь понятно изложил мысль.
Заранее благодарен!
  • Вопрос задан
  • 502 просмотра
Решения вопроса 1
@alex1478
Используйте HSV для цвета, меняйте цветовой тон от 0 до 360 (Или на нужном вам цветовом отрезке), увеличивая/уменьшая по 1 за раз. После каждого изменения конвертируйте HSV в RGB и отправляйте на ленту.
Там простой алгоритм, вы можете его сами написать, без библиотек.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Всё верно сказали - тут HSV лучше всего подходит. Давным давно делал для паскаля функции, в той ветке на Си выложили подобное. Посмотрите, пригодится при реализации.
Функции для преобразования RGB >> HSV
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы