STM Урок 145. WS2812B. Новые эффекты и оптимизация кода. Часть 2



В предыдущей части урока мы познакомились с цветовой моделью HSV, настроили проект, написали функцию конвертирования данных цветового пространства HSV в RGB, а также написали первый тест.

Попробуем изменить количество радуг, поставим или 2 или 4

 

ws2812_test01(2,2);

 

 

ws2812_test01(4,2);

 

 

Продолжаем дальше. Идём в файл ws2812.c и добавим следующий тест, который будет также вращать радугу, но в обратном направлении

 

 

Добавим прототип, а в файле main.c в бесконечном цикле функции main() закомментируем первый тест и вставим второй

 

 

Соберём код, прошьём контроллер и посмотрим результат. Показывать его нет смысла, так как статически это не будет отличаться от первого теста.

 

 

Поэтому идём в файл ws2812.c и добавим ещё один тест, в котором плавно помигаем всей лентой, изменяя параметр, отвечающий за яркость

 

 

Мы видим, что с использованием пространства HSV изменение яркости также происходит намного легче. В первом параметре также количество радуг, а во втором — количество миганий.

Напишем прототип на данную функцию в заголовочном файле и вызовем данную функцию в бесконечном цикле функции main() файла main.c

 

 

Соберём код и прошьём контроллер. Посмотрим результат

 

Всё работает.

Следующий тест

 

 

В данном тесте мы плавно мигаем каждой радугой, только когда чётная радуга по яркости убывает, нечётная возрастает, поэтому лучше использовать чётное количество радуг, хотя будет работать и с нечётным. В параметрах у нас также количество радуг и количество миганий.

Вызовем функцию теста

 

 

Испытаем данный тест

 

Отлично!

 

 

Следующий тест

 

 

Данный тест пробегает маской по всем радугам, затемняя плавно участки. То есть у нас цвет ни у одного светодиода не меняется при вращении маски, меняется лишь яркость.

Здесь есть одна ещё тонкость. Если изменять яркость на участке линейно, то будет слишком много светлого, а тёмные участки будут очень короткими. Поэтому я решил менять яркость по параболическому закону, применяя квадрат текущего значения доли от самого яркого, а не само значение доли.

Сначала я это исследовал в табличном процессоре Excel

 

 

Вот так и будет у нас меняться яркость, так как скорее всего так работает зрение человека. Если мы применяем этот закон, то на ленточке радуги получаются с приятненькими плавненькими хвостиками.

Чтобы не париться с плавающими запятыми мы ещё раз умножаем на числитель и делим на знаменатель. Получается то же самое, а АЛУ сильно не грузится.

Вызовем функцию теста

 

 

А вот и результат

 

 

Получается плавный спад яркости.

Добавим следующий тест, который делает то же самое, но в обратном направлении

 

 

Вызовем тест

 

 

Результат смотреть не будем, так как в статике мы ничего не заметим. Так что смотрите видеоурок, а лучше собирайте схему самостоятельно, будет ещё красивее.

Следующий тест, который будет резко мигать яркостью всей ленты, создавая эффект стробоскопа

 

 

Вызовем данный тест

 

 

Данный тест интересен также только в динамике.

Следующий тест — тот же стробоскоп, но попеременно чётными и нечётными радугами

 

 

Вызовем тест

 

 

Посмотрим результат теста

 

 

В следующей части урока мы напишем ещё несколько тестов, проверим их на тестовой ленте, а также затем проверим на основной ленте на улице.

 

 

Предыдущая часть Программирование МК STM32 Следующая часть

 

 

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Ленты светодиодные WS2812B разные можно приобрести здесь WS2812B

Импульсный источник питания 5 В в 40A 200 Вт можно приобрести здесь 5 В в 40A 200 Вт

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM WS2812B. Новые эффекты и оптимизация кода

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*