ARDUINO Цветомузыка на Arduino. Обсуждение проекта

Lt_bit

✩✩✩✩✩✩✩
4 Ноя 2020
15
1
@Alex U Скорее всего микро накрылся, очень чувствительный к кз, если ардуина работает на режиме подсветки значит с ней все в порядке
 

Fil61

✩✩✩✩✩✩✩
29 Ноя 2019
1
0
Добрый день форумчане.При компиляции прошивки от Slenk (v2.5b) вылезла ошибка (expected primary-expression before '>' token). Подскажите,что не так.
 

vatero

✩✩✩✩✩✩✩
1 Июл 2020
10
1
При компиляции прошивки от Slenk (v2.5b) вылезла ошибка (expected primary-expression before '>' token). Подскажите,что не так.
при настройке прошивки на вкладке Settings в подразделе
..........
// Лента
#define STRIPE_SPLIT 0 // 0 - цельная лента, 1 - разделена на два отрезка
#define NUM_LEDS 288 // Количество светодиодов (если 5 метров по 60, то 300)
#define CURRENT_LIMIT 0+ // Лимит по току в МИЛЛИАМПЕРАХ, автоматически управляет яркостью (пожалей свой блок питания!)

выставьте значение CURRENT_LIMIT больше 0 (в пределах мощности Вашего БП. Например при 4А можно выставить от 2000 до 4000)
 

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
#define CURRENT_LIMIT 0+ // Лимит по току в МИЛЛИАМПЕРАХ, автоматически управляет яркостью (пожалей свой блок питания!)
От блин, я этот несчастный плюсик чисто случайно на клаве зацепил, 10 раз его уже удалял и в итоге запостил вместе с ним...

Ну да ладно. Там еще несколько багов небольших пофиксил и вернул "прерывание" в пульт ДУ (хз, вроде получше стало). Вечером постараюсь обновить "ночную сборку")
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Alex U, сделай без резистора регулировки, выстави опорное напряжение на внутренний источник, его достаточно для этого микрофона на столько, что он будет ловить звук из соседних комнат.
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Slenk, а с чем связано такое изменение? было 780, стало 70, или это опечатка?
C++:
// нижний порог шумов
uint16_t LOW_PASS_mic = 70;        // нижний порог шумов режим VU, ручная настройка
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Slenk, первые тесты показали что все работает как и раньше, но моя проблема с VU метром так и осталась, левая и правая часть по разному работают, хотя режим моно, часто уровень у начала ленты меньше чем у конца)) Новые режимы просто огонь. Ну и VU метр стал очень агрессивный какой то)
 

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
Может рассмотрите возможность добавить эффект шкалы громкости с бегающим огоньком на краю как в частотном анализаторе?
Это когда последний пиксел как бы отстаёт от всей шкалы? Если правильно понял, то были мысли добавить, но это не в первую очередь. Еще в шкале громкости хотел режим "огонь" переписать, что бы он прям как огонь был (с рваным краем), почти даже придумал как, но это тоже не сейчас))

@Slenk, а с чем связано такое изменение? было 780, стало 70, или это опечатка?
Тут всё сложно)
У Технотрешера был кусок кода который я изначально выпилил, а затем запилил обратно с возможностью отключения. Вот эта настройка:
#define SETTINGS_VOLUME 0 // 0 - лучше для тихого прослушивания, 1 - лучше отрабатывает для громкого
1 - включает этот кусок кода.
Это предыстория.

По факту "780" - это примерная цифра которая получается у меня при "автонастройке". Если SETTINGS_VOLUME - "0", то всё ок, а если "1", то в микрофон приходится орать))
Если поставить "70" - то вроде бы при SETTINGS_VOLUME - "1" орать уже не надо и всё вроде отрабатывает четко, но при запуске автонастройки опять улетает на ~780.
В общем я как раз на этом моменте пол года назад и остановился, пока не знаю что с этим делать. Я её именно как цветомузыку практически не использую (а если использую, то тихо), поэтому "статистики" набрать не могу в каких сочетаниях лучше работает. Тесты обычно заключаются в том, что я самостоятельно издаю хаотичные звуки и смотрю на реакцию)))

@Slenk, но моя проблема с VU метром так и осталась, левая и правая часть по разному работают
ну на самом деле так и было задумано) Там небольшой "рандом" на одном канале в MONO режиме, что бы сделать "псевдо Stereo".

@Slenk, Ну и VU метр стал очень агрессивный какой то)
Ну тут настраивать надо, я просто постоянно кручу туда-сюда эти значения. А так просто свои подставить и всё.
 
Изменено:

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Slenk, по уровню понял, нужно будет поставить побольше, потому что вручную пришлось добавить немного после сброса настроек. В общем это не критично и регулируется пультом, можно не обращать внимание. Что по остальным вопросам есть какие предположения?
Еще я потерял настройку шагов изменения настроек пультом))

ну на самом деле так и было задумано) Там небольшой "рандом" на одном канале в MONO режиме, что бы сделать "псевдо Stereo".
А где его можно выпилить?)) А то слева полметра-метр уже светится, а справа полоса малевича))

Еще забыл: на режиме новом (который был тестовым полгода назад), что то нет реакции у меня на регулировку плавности движения огоньков, либо она очень медленно регулируется, остальные новые эффекты корректно отрабатывают регулировку плавности . Раньше работало.
И вопрос в догонку: можно эти бегущие огоньки сделать не в 1 пиксель, а в два например? Если да, то где это в коде?

Кстати у тя стоит по умолчанию внешний опорник, я юзаю внутренний, если у тебя max4819, то он с внутренним (1,1V) идеально работает, и он ловит шепот))

И тут еще вопрос по многострадальному 5 режиму: там вечно заливает все красным (уровни в коде не помогли), можно как то понизить верхнюю границу частотыы для НЧ спектра?
Пока вроде вопросы кончились))
 
Изменено:

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
@novvel,

По шагам:
Вкладка 1, строка 51
#define REMOTE_STEP 16 // Шаг изменения настроек (цвет, насыщенность, яркость и тд.) пультом. (1-2-4-8-16)

По всевдо стерео:
Вкладка 2, строка 33
RsoundLevel = map(RsoundLevel, LOW_PASS_mic, 1023, 0, 500);
LsoundLevel = smartIncr(RsoundLevel, random8(41) - 20, 0, 500); ------- поменять на LsoundLevel = RsoundLevel;
Если еще кому-то это мешает, то в прицепе могу добавить настройку для простого отключения.

По новым режимам там вообще печаль беда, мне не нравится как они написаны и как работают (по сути они и остались "БЕТА"). Там я добавил настройку изменения цвета, а "скорость" наоборот закоментил, не помню почему (то ли просто, то ли что-то глючило, надо разбираться). Там еще я начинал писать режим, что бы цвет зависел от частоты, но не дописал. Два огонька по легкой не сделать.

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

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@novvel,
Если еще кому-то это мешает, то в прицепе могу добавить настройку для простого отключения.

По новым режимам там вообще печаль беда, мне не нравится как они написаны и как работают (по сути они и остались "БЕТА"). Там я добавил настройку изменения цвета, а "скорость" наоборот закоментил, не помню почему (то ли просто, то ли что-то глючило, надо разбираться). Там еще я начинал писать режим, что бы цвет зависел от частоты, но не дописал. Два огонька по легкой не сделать.

Еще Гайвер там активно занялся свой библиотекой для лед лент, и по хорошему надо бы переписать весь код на неё. Короче начать и кончить, как говорится...
По рандому было бы идеально вынести в настройки скетча, на короткой ленте она полезна, а на длинной беда бедовая) Я смотрю там число какое то стоит в рандоме, это какой то коэффициент? Может можно немного его снизить что бы была разница, но небольшая.
Ну новые режимы идеально работают пока что, глюки у меня были сначала, но я полгода назад решил их обновлением библиотек, сейчас все ровно работает без глюков. Словил глюк в новых режимах во всех сразу, пощелкал где то насыщенность и во всех подрежимах остался один цвет, но щелкнул вверх/вниз и опять стало рандомные цвета, как такой глюк воткнуть в настройку? было бы круто иметь возможность с пульта сделать либо радугу, либо один цвет на выбор :D
В общем остаюсь пока на новой версии.
В скетче на первой вкладке, в описании кнопок пульта нумерация режимов два раза 7 режим
вот тут по бегущим огонькам идеальная настройка по скорости
 
Изменено:

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
@novvel,
По рандому там от - 4% до +4% относительно моно канала, по идее должно быть вообще еле заметно.

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

В описании кнопок там вообще надо кучу правок внести.

Да, с этого видео и "слизывали" эти режимы)) Но там совершенно другая структура кода и библиотеки, поэтому все легло не очень гладко) Очень долго бодался, что бы хоть как-то завелось на нашей "платформе"
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Slenk, А как с пульта выбрать радугу или один цвет? Думаю так и оставить как есть, но сделать не рандомный цвет, а вручную выбирать, большего и не надо, ну или добавить отдельно еще к радуге и рандому, если это место в коде не много занимает. Щас если получится сделаю видео.
Вот, прокручиваешь все подрежимы в 2 и переключаешь на 8, висит всего один цвет, щелкаешь вниз и он слетает, как его выбрать самому, что бы не только рандом и радуга?))
 
Изменено:

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
@novvel, на память пофиг, я в прошлой жизни был zip архиватором)))

C++:
    // 3 Режим: цветомузыка 5 полос (подрежимы: 0-BGRGB, 1-RGBGR, 2-RBGBR, 3-BRGRB, 4-GRBRG в cmu2_mode)
    case 2:
      switch (cmu2_mode) {
        case 0:
          for (int i = 0; i < NUM_LEDS; i++) {  //0-BGRGB
            if (i < STRIPE)          leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);  //B
            else if (i < STRIPE * 2) leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);   //G
            else if (i < STRIPE * 3) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);   //R
            else if (i < STRIPE * 4) leds[i] = CHSV(MID_COLOR1, 255, thisBright[1]);   //G
            else if (i < STRIPE * 5) leds[i] = CHSV(HIGH_COLOR1, 255, thisBright[2]);  //B
          }
          break;
        case 1:
          for (int i = 0; i < NUM_LEDS; i++) {  //1-RGBGR
            if (i < STRIPE)          leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < STRIPE * 2) leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
            else if (i < STRIPE * 3) leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);
            else if (i < STRIPE * 4) leds[i] = CHSV(MID_COLOR1, 255, thisBright[1]);
            else if (i < STRIPE * 5) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
          }
          break;
        case 2:
          for (int i = 0; i < NUM_LEDS; i++) {  //2-RBGBR
            if (i < STRIPE)          leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < STRIPE * 2) leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);
            else if (i < STRIPE * 3) leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
            else if (i < STRIPE * 4) leds[i] = CHSV(HIGH_COLOR1, 255, thisBright[2]);
            else if (i < STRIPE * 5) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
          }
          break;
        case 3:
          for (int i = 0; i < NUM_LEDS; i++) {  //3-BRGRB
            if (i < STRIPE)          leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);
            else if (i < STRIPE * 2) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < STRIPE * 3) leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
            else if (i < STRIPE * 4) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < STRIPE * 5) leds[i] = CHSV(HIGH_COLOR1, 255, thisBright[2]);
          }
          break;
        case 4:
          for (int i = 0; i < NUM_LEDS; i++) {  //4-GRBRG
            if (i < STRIPE)          leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
            else if (i < STRIPE * 2) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < STRIPE * 3) leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);
            else if (i < STRIPE * 4) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < STRIPE * 5) leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
          }
          break;
      }
      break;
    // 4 Режим: цветомузыка 3 полосы (подрежимы: 0-RGB, 1-BGR, 2-BRG, 3-GRB в cmu3_mode)
    case 3:
      switch (cmu3_mode) {
        case 0:
          for (int i = 0; i < NUM_LEDS; i++) {
            if (i < NUM_LEDS / 3)          leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);   //R
            else if (i < NUM_LEDS * 2 / 3) leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);   //G
            else if (i < NUM_LEDS)         leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);  //B
          }
          break;
        case 1:
          for (int i = 0; i < NUM_LEDS; i++) {
            if (i < NUM_LEDS / 3)          leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);
            else if (i < NUM_LEDS * 2 / 3) leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
            else if (i < NUM_LEDS)         leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
          }
          break;
        case 2:
          for (int i = 0; i < NUM_LEDS; i++) {
            if (i < NUM_LEDS / 3)          leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);
            else if (i < NUM_LEDS * 2 / 3) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < NUM_LEDS)         leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
          }
          break;
        case 3:
          for (int i = 0; i < NUM_LEDS; i++) {
            if (i < NUM_LEDS / 3)          leds[i] = CHSV(MID_COLOR, 255, thisBright[1]);
            else if (i < NUM_LEDS * 2 / 3) leds[i] = CHSV(LOW_COLOR, 255, thisBright[0]);
            else if (i < NUM_LEDS)         leds[i] = CHSV(HIGH_COLOR, 255, thisBright[2]);
          }
          break;
      }
      break;
C++:
    // 6 Режим: Цветомузыка 3-5 полос ======================================================================================================
    case 6: {
        spektr_level();
        byte cmu_arr[] = {cmu_color_mode % 3, (cmu_color_mode + 1 + cmu_color_mode / 3) % 3, (cmu_color_mode + 2 - cmu_color_mode / 3) % 3};
        byte k = 5;
        if (cmu3_5_mode) k = 3;
        for (int i = 0; i < 3; i++) {
          for (int j = (NUM_LEDS / k * (k - 3 + i)); j < (NUM_LEDS / k * (k - 2 + i)); j++) {
            leds[j] = CHSV(color_arr[cmu_arr[i]], 255, thisBright[cmu_arr[i]]);
            if (!cmu3_5_mode) leds[NUM_LEDS - j - 1] = CHSV(color_arr[cmu_arr[i]], 255, thisBright[cmu_arr[i]]);
          }
        }
      } break;
Так у меня еще и две комбинации цветов добавлено))
 
Изменено:

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Slenk, сейчас же нет выбора одного цвета, чтобы он сам не менялся? поставил белый допустим и что бы он всегда был белым, не меняясь со временем или есть и я туплю?.
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Slenk, Ну короче оно есть, но делается само, выше описал как я словил два раза такое и кинул видео, пока больше не получилось так сделать))
Посидел поигрался с 8 режимами, рандомные цвета лично для меня (мнение не может совпадать со всеми!) вообще не очень, вот радуга или статика нравится, приятнее для глаза вместо каши из цветов))
 
Изменено:

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
@Slenk, Ну короче оно есть, но делается само, выше описал как я словил два раза такое и кинул видео, пока больше не получилось так сделать))
Попробуй на вкладке 6, строка 14 поменять:
case 0: ++this_color; break;
на
case 0: this_color++; break;

И потестить, может пропадет этот глюк. А то я тут типо на работе работу работаю, а дома супруга может не позволить засесть кодить)
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Slenk, поменял, ничего не испортилось, но и баг такой нужный я больше не смог поймать)
 

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
Помогло, в статичном режиме мерцание прекратилось, но стали тупить другие режимы, типа плавной смены цвета (теперь рывками меняются)

Еще заметил, что если зажать любую кнопку на пульте, то мерцания исчезают в статичном тусклом режиме, даже без приписывания Делей 10
Пропиши "делей" на вкладке 1 после строки 16
else one_color_all(HUE_ORANGE, WHITE_TEMP * 2, 255);

и после строки 18 (но она станет строкой 19
case 1: one_color_all(LIGHT_COLOR, LIGHT_SAT, 255); //Один цвет

В этих местах это не так критично и ни на что другое влиять не должно. А потом может что-то получше придумаю.
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
Попробуй на вкладке 6, строка 14 поменять:
case 0: ++this_color; break;
на
case 0: this_color++; break;

И потестить, может пропадет этот глюк. А то я тут типо на работе работу работаю, а дома супруга может не позволить засесть кодить)
короче снова ловится пока стабильно такой баг, не помогло, щелкаю вторые режимы и в них влево-вправо, потом сразу жму 8 и зависает на одном цвете, пока буду так один цвет включать, мне один цвет больше всего зашел)) Еще кстати может сделать в 8 режиме в подрежиме где полоски угасают к середине, что бы угасали к одному пикселю, а не к двум?
UPD: зависает на том цвете, на котором я ушел в радуге (в рандоме тоже виснет на рандомном цвете видимо, но цвет берется из тех которые были в радуге до переключения на рандом) из 8 режима во 2й режим. Может в епром пишет чего не так? И еще нашел закономерность, нужно дойти до огня на шуме перлина во втором режиме и тогда в 8 глюкнет цвет на последнем который был до перехода на 8. И баг лечится просто вниз/вверх в 8.
 
Изменено:

Alex U

✩✩✩✩✩✩✩
18 Дек 2020
3
0
@Alex U, сделай без резистора регулировки, выстави опорное напряжение на внутренний источник, его достаточно для этого микрофона на столько, что он будет ловить звук из соседних комнат.
Когда в прошивке указываю Potent=0 у меня загорается лента наполовину и не реагирует на звук. Что то еще нужно делать, кроме перешивки ардуино?
 

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
@novvel,
благодарю за подробный баг репорт. Это сильно помогло отловить баг. Я понял когда он возникает, что именно происходит и несколько вариантов лечения. А еще я узнал много нового. Но вот только не понял какого фига это происходит))

Правда до конца оттестировать не удалось, но скорей всего лучшим решением будет замена:
char new_effect_color = 0;
на
int8_t new_effect_color = 0;
А если не поможет, то придется "костылить".

И вообще надо бы во всем коде заменить"char" на "int8_t ". Как-то так исторически сложилось, что я везде использовал "чар", а это не правильно.

А происходит следующее:
Есть переменная "чар" в которой хранится номер режима "1" или "0" (потом будет больше, поэтому не БУЛ). Переменная задается явно в начале кода, затем может меняться только пультом и никак иначе. Но при запуске режима "огонь" (он очень ресурсоемкий) значение нашей переменной меняется на какое-то рандомное. Смею предположить, что это как-то связано с распределением динамической памяти и она просто затирается (или еще чего). Может кто-то знает точно?
 
  • Лойс +1
Реакции: novvel

Lt_bit

✩✩✩✩✩✩✩
4 Ноя 2020
15
1
@Slenk поддержка меги будет или самому костыли делать?) На меге много багов на режимах и эффектах! Идея для проекта сделать демо режим. Суть что бы эффекты ( в классе new_effect) по таймеру переключались в рандом порядке или по порядку