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



В предыдущей части урока мы написали несколько тестов и проверили их на практике.

Следующий тест будет очень интересный. Там будет бежать по ленте маска насыщенности, то есть плавно бежим плавным белым пятном.

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

 

 

Только в данной библиотеке нет функции кубического корня. Но есть функция любой степени. А из курса математики мы помним, что кубический корень — это ничто иное, как число в степени 1/3. Вот эту функцию мы и будем использовать в нашем коде. Вот такая вот горизонтальная парабола является графиком функции кубического корня

 

 

Вот такой получится код теста

 

 

Также есть ещё одна достопримечательность в этом коде. Когда мы убавляем насыщенность, мы стремимся к белому цвету, а белый цвет — это равенство всех цветов по яркости, а яркость у нас только одна, поэтому при белом цвете все цвета начнут светиться максимальном цвете, это надо как-то уравнять. Для этого мы и находим среднюю яркость, складывая все три яркости всех цветов в пикселе и деля их на 3. Благодаря этому, яркость на всём протяжении ленты будет равномерная.

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

 

 

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

 

 

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

 

 

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

 

 

 

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

 

 

Для плавности затухания также применена парабола.

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

 

 

Посмотрим результат выполнения

 

 

 

 

 

 

 

 

 

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

 

 

 

Вызовем также по очереди данный тест с различными параметрами

 

 

Также попробуем их в работе. Здесь показывать нет смысла, так как будет одно и то же. Направление здесь не покажешь.

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

 

 

Вызовем наш тест

 

 

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

 

 

Отлично! Все тесты у нас работают.

Распределим теперь их вперемешку, чтобы было интереснее

 

 

Проверим ещё раз работу кода на всех тестах, затем выставим в файле w2812.h параметры для уличной ленты, увеличив там количество светодиодов ленты и также установив максимальную яркость

#define BRIGHT 255

#define LED_COUNT 300

Отнесём контроллер на чердак, подключим его к уличной ленте и посмотрим, как работают наши новые красивые эффекты уже на ней

 

                               

 

Итак, в данном занятии мы произвели оптимизацию кода, нацеленную на использование цветовой модели HSV, благодаря которому нам стало намного легче оперировать нужными величинами в наших тестах (эффектах). Также использование 8-битного буфера для DMA позволило нам значительно сэкономить пространство в оперативной памяти!

 

Благодарю всех за внимание!

 

 

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

 

Исходный код

 

 

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

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

Светодиодные ленты 1м-5м 1м-5м 150-300 светодиодов Защита IP60-IP67 можно приобрести здесь WS2812B

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

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

 

 

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

 

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

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

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

*