ARDUINO Крутая гирлянда на ёлку. Обсуждение проекта

Ветка обсуждения проекта Гирлянда.
Страница на сайте: https://alexgyver.ru/christmaslights/
Видео:

Делитесь своими вариантами изготовления, модификациями и улучшениями!
 

Комментарии

Kapara

✩✩✩✩✩✩✩
27 Май 2020
3
1
@Kapara, проверь в параметрах номер пина на ленту
направление ленты (сдается вход с выходом напутан судя по разъему)
если лента составная попробуй подключить другой сегмент ленты первым.
Огромное спасибо за быстрый ответ и внимательность! Ты прав — не учёл направление, вылетело из головы, теперь все работает. В реальности выглядит просто обалденно, по видео не передаётся.
 
  • Лойс +1
Реакции: Palpalych

Orogon

✩✩✩✩✩✩✩
22 Июл 2020
2
0
Здравствуйте. Впервые занимаюсь чем-то подобным, поэтому есть вопрос. Я припаял гирлянду, блок на 5V и 3A, в прошивке менял только значение тока на 3000 и параметр #define BACKGR_ON. Но когда гирлянда работает, она мерцает белым цветом. То есть режимы работают, но поверх него еще загорается белым каждая свечка. Так задумано или я накосячил где-то? Самостоятельно найти параметр, который мог бы за это отвечать, я не смог. Видео прилагаю
 

Kapara

✩✩✩✩✩✩✩
27 Май 2020
3
1
Здравствуйте. Впервые занимаюсь чем-то подобным, поэтому есть вопрос. Я припаял гирлянду, блок на 5V и 3A, в прошивке менял только значение тока на 3000 и параметр #define BACKGR_ON. Но когда гирлянда работает, она мерцает белым цветом. То есть режимы работают, но поверх него еще загорается белым каждая свечка. Так задумано или я накосячил где-то? Самостоятельно найти параметр, который мог бы за это отвечать, я не смог. Видео прилагаю
Это встроенный режим:
4х клик: вкл/выкл блёстки
Удачи!
 

cverg.andvari

✩✩✩✩✩✩✩
13 Авг 2020
1
0
Подскажите,есть ли в гирлянде автоматическая смена режимов?Если ,да ,то как включить?
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
  • Лойс +1
Реакции: cverg.andvari

Aravix

✩✩✩✩✩✩✩
4 Май 2020
3
2
День добрый всем. Такая проблемка. Все прошивается, все работает отлично, кроме переключения на предыдущий эффект по тройному клику. Пульт не подключаю в прошивке. Интересно что эффект смены режимов пробегает, но по факту режим остается тот же и не меняется. Прошивал на разных платах, на разных версиях IDE установленных на разных компах, правильные библиотеки подключаю. В чем может быть подвох?
____
В общем написал по этому поводу Алексу, он ответил вот что:
Привет, очень похоже на ошибку в коде) попробуй файл main.ino, строка 303, должно быть
if (--tek_my_mode <= 0)
Добавить --


И это помогло.
На сайте уже есть исправленная прошивка.
 
Изменено:
  • Лойс +1
Реакции: cverg.andvari

vansar

✩✩✩✩✩✩✩
1 Дек 2020
3
0
Добрый день Господа, прошу помощи, я новичок в программировании, подскажите а как сделать эффекты для гирлянды только в белом холодном цвете, и прикрутить пульт от wawgat для переключения режимов. Можно ли где-то изменить параметр что бы только cool white цвет был.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Добрый день Господа, прошу помощи, я новичок в программировании, подскажите а как сделать эффекты для гирлянды только в белом холодном цвете, и прикрутить пульт от wawgat для переключения режимов. Можно ли где-то изменить параметр что бы только cool white цвет был.
Самое простое перед FastLED.show(); в цикле loop() сделать десатурацию массива светодиодов
C++:
for (uint8_t i, i < NUM_LEDS, i++)
{
    uint8_t с = (((leds[i].r >> 1) + (leds[i].b >> 1))>>1) + (leds[i].g >> 1);
    leds[i].setRGB(c, c, c); // не проверял, но вроде должно работать быстро
};
касательно пульта - тут рассказывал как прикрутить почти любой пультег https://community.alexgyver.ru/threads/girljanda-na-jolku-na-osnove-gajverovoj.2279/
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
десатурацию массива светодиодов
Звучит! Еще круче чем разнасыщение эммитеров фотонов. А если совместить - десатрурация эммитеров светового потока - вообще класс! :)
* По сути - цикл по всем светодиодам это уже не сильно быстро. А кроме прочего кроме RGB есть вариант HSV, где как раз таки S - насыщенность, V - яркость, а H - тон цвета.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Звучит! Еще круче чем разнасыщение эммитеров фотонов. А если совместить - десатрурация эммитеров светового потока - вообще класс! :)
* По сути - цикл по всем светодиодам это уже не сильно быстро. А кроме прочего кроме RGB есть вариант HSV, где как раз таки S - насыщенность, V - яркость, а H - тон цвета.
Я предложил самый быстрый вариант решения проблемы. Не думаю, что штатные HSV функции будут быстрее.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Я предложил самый быстрый вариант решения проблемы. Не думаю, что штатные HSV функции будут быстрее.
Ага... замечательно, объясните код для варианта 255 в каждом цветовом канале - белый цвет. Что он у вас выдаст и почему? :)
* Намекаю - код не то чтобы быстрый, да еще и не совсем так чтобы правильный.

Хотя нет, это я торможу - в общем-то теряется только один бит. В принципе да, вариант хороший. Прошу прощения.
Единственное, что "десатурация" лично у меня вызывает улыбку, термин прикольный, только нифига не понятный чего имелось в виду. :)
Может деколоризация в данном случае более верный? ))) Хотя не менее забавный.
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Ага... замечательно, объясните код для варианта 255 в каждом цветовом канале - белый цвет. Что он у вас выдаст и почему? :)
* Намекаю - код не то чтобы быстрый, да еще и не совсем так чтобы правильный.

Хотя нет, это я торможу - в общем-то теряется только один бит. В принципе да, вариант хороший. Прошу прощения.
Единственное, что "десатурация" лично у меня вызывает улыбку, термин прикольный, только нифига не понятный чего имелось в виду. :)
Может деколоризация в данном случае более верный? ))) Хотя не менее забавный.
Desaturation
(c) Wikipedia
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Palpalych, так у вас цвет-то останется? Вы же не интенсивность цвета понижаете, а в градации серого переводите, или не? На всякий перевод для colorfulness.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@Palpalych, так у вас цвет-то останется? Вы же не интенсивность цвета понижаете, а в градации серого переводите, или не? На всякий перевод для colorfulness.
Так задача стояла сделать все эффекты черно-белыми. В предложенной процедуре просто высчитывается среднее арифметическое между 3-х каналов. (r+g+b)/3. Правда, немного извращенческим способом, но все-же...

А если задаться вопросом учета яркостной составляющей каждого канала то:
C++:
uint8_t с = ((uint16_t)((leds[i].g >> 1) + (leds[i].r >> 2) + (leds[i].b >> 3))*73) >> 6;
... или как-то так

По поводу Насыщенности:
Насыщенность[1] (теория цвета) (англ. colorfulness, chroma, saturation) — интенсивность определённого тона, то есть степень визуального отличия хроматического цвета[2] от равного по светлоте ахроматического (серого) цвета. Насыщенный цвет можно назвать «сочным», «глубоким», менее насыщенный — «приглушённым», приближённым к серому. Полностью ненасыщенный цвет будет оттенком серого. Насыщенность (saturation) — одна из трёх координат в цветовых пространствах HSL и HSV.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Насыщенность (saturation) — одна из трёх координат в цветовых пространствах HSL и HSV.
Ага, именно про это я вам и сказал. Вы же фактически цвет убираете в принципе, т.к. во все каналы записываете одно и то же значение, вне зависимости от того что там было, т.е. для R=10, G=255, B=127 будет R=192, G=192, B=192 на выходе. Про вариант же
C++:
uint8_t с = ((uint16_t)((leds[i].g >> 1) + (leds[i].r >> 2) + (leds[i].b >> 3))*73) >> 6;
мне вообще сказать особо нечего, т.к. я его не понимаю... Зачем вы делите зеленый на два, при красный на четыре, а синий на восемь, затем все это складываете, домножаете на магическое число 73 и затем снова делите на 64? Какие-то магические преобразования...

Впрочем ладно, десатурация, так десатурация.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@kDn,
По первому примеру будет 130, 130, 130... Цвет убираю в принципе ))) Вы имели ввиду что если преобразовать спектр, то он будет серым? Все верно по этому алгоритму.

Для отображения градиента серого как раз вторая формула. Для этого взял упрощенную формулу получения яркости из модели YIQ:
где - Y = 0.299 * R + 0.587 * G + 0.114 * B;

у меня же
Y = (0.25 * R + 0.5 * G + 0.125 * B) * 1,14; (где 1,14 = 73/64 - делается для скорости вычислений)
 

vansar

✩✩✩✩✩✩✩
1 Дек 2020
3
0
Спасибо, классно про "десатурацию", домой приеду попробую залить, а то жена затюкала, не надо мол нам РГБ сообщества, хочу все в белом цвете.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@Palpalych,

проверил, решение работает на моем последнем проекте
C++:
            for (uint8_t i = 0; i < NUM_LEDS; i++)
            {
                //uint8_t с = (((leds[i].r >> 1) + (leds[i].b >> 1)) >> 1) + (leds[i].g >> 1);
                uint8_t c = ((uint16_t)((leds[i].g >> 1) + (leds[i].r >> 2) + (leds[i].b >> 3)) * 73) >> 6;
                leds[i] = CRGB(c, c, c);
            };
            FastLED.show(); // <- это код в самом скетче
... но не ручаюсь за точность алгоритмов в гирлянде этого топика
 

vansar

✩✩✩✩✩✩✩
1 Дек 2020
3
0
К сожалению не работает, вставил вот так
//------------------MAIN LOOP---------------------------------------------------------------
void loop() {
#if (USE_BTN == 1)
static bool stepFlag = false;
static bool brightDir = true;
btn.tick();
if (btn.isSingle()) {
onFlag = !onFlag;
FastLED.setBrightness(onFlag ? max_bright : 0);
for (uint8_t i = 0; i < NUM_LEDS; i++)
{
//uint8_t с = (((leds.r >> 1) + (leds.b >> 1)) >> 1) + (leds.g >> 1);
uint8_t c = ((uint16_t)((leds.g >> 1) + (leds.r >> 2) + (leds.b >> 3)) * 73) >> 6;
leds = CRGB(c, c, c);
};
FastLED.show();
и не работает.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@vansar,

Попробуй, дальше по коду есть еще
C++:
  static uint32_t showTimer = 0;
  if (onFlag && millis() - showTimer >= 10) {
    showTimer = millis();
      
      --- вставить сюда ---
      
    FastLED.show();
  }
 

Kushpapa

✩✩✩✩✩✩✩
5 Дек 2020
14
1
Ребят, подскажите, пожалуйста)
Поставил сенсорную кнопку вместо тактовой, мне кажется проблема в этом. По двойному клику резко гаснет, по тройному всё ок переключает. 1 точно работает. 4 так и не понял.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Ребят, подскажите, пожалуйста)
Поставил сенсорную кнопку вместо тактовой, мне кажется проблема в этом. По двойному клику резко гаснет, по тройному всё ок переключает. 1 точно работает. 4 так и не понял.
Либо проверь конфигурацию кнопки в скетче, либо меняй на физическую. Толку от нее больше.

Посмотри здесь https://community.alexgyver.ru/threads/krutaja-girljanda-na-jolku.2277/#post-63985
 
Изменено:
  • Лойс +1
Реакции: Kushpapa

Vit_But

✩✩✩✩✩✩✩
26 Янв 2019
28
8
Подскажите, все работает, даже пульт . Но не могу сделать фиолетовый.
#if IR_Key_Solid_Violet
case IR_Key_Solid_Violet : /////////////////////////////////////////////////////////////////////////// Установить цвет Фиолетовый
demorun = 0; ledMode = 100; palchg = 0;
solid = CRGB::Violet;
#if LOG_ON == 1
Serial.println(F("Solid_Violet"));
#endif
break;
Все остальные цвета нормально, а вот фиолетовый голубым светит.
Что не так?
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@Vit_But,

в commands.h
Нужно найти код команды отвечающей за фиолетовую кнопку и вписать его

к примеру.
C++:
#define IR_Key_Solid_Black                  0xFFA25D  // pp-Power                //  Установить цвет Черный  (Выключает гирлянду, Например перед тем как сказать елочка зажгись на детском утреннике)
#define IR_Key_Solid_Red                    0xFF30CF  // pp-Red                  //  Установить цвет Красный
#define IR_Key_Solid_Orange                 0xFF38C7  // pp-Orange               //  Установить цвет Оранжевый
#define IR_Key_Solid_Yellow                 0xFF10EF  // pp-Yellow               //  Установить цвет Желтый
#define IR_Key_Solid_Green                  0xFF18E7  // pp-Green                //  Установить цвет Зеленый
#define IR_Key_Solid_SkyBlue                0         //                         //  Установить цвет Голубой
#define IR_Key_Solid_Blue                   0xFF7A85  // pp-Blue                 //  Установить цвет Синий
#define IR_Key_Solid_Violet                 0xFF5AA5  // pp-Violet               //  Установить цвет Фиолетовый
#define IR_Key_Solid_White                  0xFF52AD  // pp-Up                   //  Установить цвет Белый
У разных пультов могут эти значения отличаться.