100 эффектов RGB

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: 100 эффектов RGB

Сообщение просто КОТ »

Тот был из статьи, а вот мой авторский! Эффект №3 -- Блицкриг!

Код: Выделить всё

1<<PINB0
delay_ms(300)
1<<PINB1
delay_ms(300)
1<<PINB2
delay_ms(300)
0<<PINB1
delay_ms(300)
0<<PINB0
delay_ms(300)
1<<PINB1
delay_ms(300)
0<<PINB2
delay_ms(300)
0<<PINB1
Изображение
И ты врёшь!!! © Vladisman
Изображение
Реклама
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Re: 100 эффектов RGB

Сообщение WildCat »

№ 4 - Радуга
Могу предложить полноценные радужные переливы.
Все что нужно - сделать преобразование из HSV в RGB модель для светодиода. Для HSV примем S и V равными 100 (максимальное значение), а H (hue, оттенок) будем вращать по кругу (0-360градусов).
если теперь сделать цикл от 0 до 360, для каждого значения H выполнять преобразование по формуле.

Для получения мягких тонов можно убавлять параметр S (saturation - насыщенность). Тогда из сочного цвета он будет перетекать в бледный оттенок и в белый. По мне, так это клевая фишка для лампы настроения на одном RGB диоде. Если сделать насыщенность, например, 30, а оттенок крутить в пределах желаемого пользователем оттенка (сине-зеленый, красно-оранжевый например).
Вообще, HSV модель куда более "человечна", что позволяет программировать множество цветовых эффектов с минимальными затратами. Все, что для этого нужно - по сути функция, осуществляющая перевод цвета из одной модели в другую. Вот она:

Код: Выделить всё

void HSV2RGB (unsigned char &r, unsigned char &g, unsigned char &b,

unsigned int i_hue, unsigned char sat, unsigned char val)

/* Вход:

* 0 <= hue < 360 градусов - оттенок. Основные цвета:

* 0 - красный, 60 - желтый,

* 120 - зеленый, 180 - голубой

* 240 - синий, 300 - пурпурный

* hue == 360 - не определён

* 0 <= sat <= 255 - Saturation - насыщенность

* 0 <= val <= 255 - Value - яркость

*

* Выход:

* 0 <= r,g,b <= 255 - значения красного, зеленого, синего

*/

  {

    int ii;

    double fr, hue;

    unsigned char c1, c2, c3;

    if (!sat)

      r = g = b = val;

    else

      { /* Хроматический цвет */

        while (i_hue >= 360)

          i_hue -= 360;

        hue = i_hue;

        ii = (int)(hue /= 60.0);

        fr = hue - ii;

        c1 = (val * (255 - sat)) / 255;

        c2 = (val * (255 - sat * fr)) / 255;

        c3 = (val * (255 - sat * (1.0 - fr))) / 255;

        switch (ii)

          {

            case 0: r = val; g = c3; b = c1; break;

            case 1: r = c2; g = val; b = c1; break;

            case 2: r = c1; g = val; b = c3; break;

            case 3: r = c1; g = c2; b = val; break;

            case 4: r = c3; g = c1; b = val; break;

            case 5: r = val; g = c1; b = c2; break;

          }

      }

  }
Реклама
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: 100 эффектов RGB

Сообщение просто КОТ »

А это чем то отлечается от плавной смены цвета под №2?! Если да, то это эффект №4 -- радуга!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Re: 100 эффектов RGB

Сообщение WildCat »

Подписал номер.
Да, эффект отличается. Во втором примере там просто по кругу красный, зеленый и синий цвета зажигаются плавно. В моем же примере их можно зажигать в хитрых комбинациях. Правда, для получения хороших оттенков, нужно сначала выставить баланс белого - программными средствами подать с МК ШИМ со 100% заполнением, как он будет подаваться в дальнейшем из управляющей программы. При этом, скорее всего мы получим не белый, а розовый свет. Теперь нужно уже аппаратным путем подобрать токоограничивающие резисторы в цепях светодиодов так, чтобы он давал субъективно чистый белый свет (по выбору, можно холодный или теплый оттенок). После этого моя радуга будет давать правдивые оттенки (при условии хорошего светорассеивателя, чтобы свет диодов хорошо смешивался).
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: 100 эффектов RGB

Сообщение просто КОТ »

WildCat писал(а):Все что нужно - сделать преобразование из HSV в RGB модель для светодиода.
А как мне это сделать?! Что то переписать надо?! Я пока новичок в МК, не всё понимаю. . . :oops:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: 100 эффектов RGB

Сообщение hybroid »

Что-то я не вкурю, как можно сделать 100 эффектов на одном несчастном RGB-диоде :o Кроме мырганий, переливаний и плавного включения-выключения что ещё можно сделать?.. Вроде ничего :dont_know:
Реклама
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: 100 эффектов RGB

Сообщение просто КОТ »

Мда. 10 это я переборщил. . . Ну хотя бы десяток! :))) :))) :))) :wink:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Re: 100 эффектов RGB

Сообщение WildCat »

просто КОТ писал(а):А как мне это сделать?! Что то переписать надо?! Я пока новичок в МК, не всё понимаю. . . :oops:
Я же привел функцию. Ей даешь три параметра HSV модели, т.е. оттенок, насыщенность и яркость. А она возвращает три значения - уровни яркости для RGB диодов. Сама функция очень шустрая. Чтобы сделать радугу, нужно эту функцию гонять в цикле, меняя параметр Hue от 0 до 360 (359 если быть точным). А полученные значения выставлять на ШИМ для светодиодов. Чем меньше задержка в цикле, тем быстрее будут меняться цвета.
1stFX
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Вт окт 05, 2010 11:32:50
Откуда: ЗаМКАДыш

Re: 100 эффектов RGB

Сообщение 1stFX »

Лучшее - враг хорошего. У WildCat все нормально реализовано на первый взгляд, зачем мудрить?
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Re: 100 эффектов RGB

Сообщение WildCat »

Почему на первый взгляд? :)
Просто я предложил универсальную функцию, с помощью которой проще и быстрее запрограммировать определенные цвета и их последовательности, ввиду приближенной к человеческому восприятию модели. Человек же не смотрит на цвет и не говорит, что он на 50% красный, 80% зеленый и 100% синий. (ну только если он не веб дизайнер) Вместо этого он скажет, что это бледно-голубой цвет.
Один раз загнав функцию в код, можно многие эффекты сделать на ее основе. Кроме вращения Hue, можно выбрать конкретный оттенок и изменением Value плавно менять его яркость. Или, оперируя насыщенностью и оттенком сделать переход по всем цветам через белый. И т.д. Намного упрощается создание всех циклов, рассчитывающих RGB параметры, достаточно 1-2 вложенных для практически любого эффекта.
Ответить

Вернуться в «Умные мысли»