Объединение двух скетчей в один

ATEMY

✩✩✩✩✩✩✩
1 Дек 2020
24
0
Вечер добрый!

Кто подскажет, как объединить два скетча в один на arduiono nano? Либо как реализовать dualboot?

Хочу объединить цветомузыку гайвера и гирлянду елочную. К примеру при нажатии на кнопку чтобы менялся режим(цветомузыка - гирлянда - цветомузыка).
 

xof

★✩✩✩✩✩✩
24 Окт 2020
123
44
Думаю самое простое это собрать всё в одном скетче и сделать switch который будет запускать разные логики в зависимости от режима.

C++:
switch (mode) {
    case 1:
      //гирлянда
      break;
    case 2:
      //музыка
      break;
 

ATEMY

✩✩✩✩✩✩✩
1 Дек 2020
24
0
Тогда следующий вопрос. Реально как-то уменьшить размер скетчей? К примеру гирлянда занимает больше половины памяти.

Я уже подумал, можно ли выдрать с гирлянды десятка два эффектов и назначить их на 7 режим цветомузыки(там где бегущая радуга и подсветка. Добавить эффекты гирлянды как подрежимы на (#)
 

xof

★✩✩✩✩✩✩
24 Окт 2020
123
44
Реально как-то уменьшить размер скетчей?
Разумеется. Просто вырезаешь куски кода ненужного, адаптируешь нужное. Правда всё будет перелопачено так, что в конечном счёте получится скетч с нуля. Но так даже интереснее. :geek:
 
  • Лойс +1
Реакции: Nikanor и bort707

bort707

★★★★★★✩
21 Сен 2020
3,058
910
Разумеется. Просто вырезаешь куски кода ненужного, адаптируешь нужное. Правда всё будет перелопачено так, что в конечном счёте получится скетч с нуля.
ну да, задачка требует полного понимания программного кода и логики работы обоих исходных скетчей...
Сдается мне, что раз ТС об этом спрашивает - у него с этим проблемы. Понимал бы - не спрашивал :)
 
Изменено:
  • Лойс +1
Реакции: Nikanor

ATEMY

✩✩✩✩✩✩✩
1 Дек 2020
24
0
ну да, задачка требует полного понимания программного кода и логики работы обоих исходных скетчей...
Сдается мне, что раз ТС об этом спрашивает - у него с этим проблемы. Понимал бы - не спрашивал :)
Ну я не полный профан, но знания минимальные.
Кто бы помог...
 

ATEMY

✩✩✩✩✩✩✩
1 Дек 2020
24
0
Начинайте работу. Задавайте конкретные вопросы, поможем.
Вечером комп включу, задам тогда. Я вчера ковырялся в коде, не особо получилось.

Я в цветомузыке нашел вызов режимов через case. Там через case 5 включается стробоскоп. Я вместо его кода попробовал вкинуть весь скетч гирлянды. Естественно получил ошибку, что нет файла comands.h
Это получается нужно все вкладки (файлы) с гирлянды закидывать в папку с цветомузыкой?
 

bort707

★★★★★★✩
21 Сен 2020
3,058
910
Это получается нужно все вкладки (файлы) с гирлянды закидывать в папку с цветомузыкой?
не только закидывать, но и править почти каждый файл.

Чтоб вы поняли уровень задачи - смешать говяжий фарш сосвиным может любой. а вот чтоб на выходе получился теленок с поросячьей головой - искусство нужно. А чтоб оно после этой операции еще и бегало... :)))
 

ATEMY

✩✩✩✩✩✩✩
1 Дек 2020
24
0
не только закидывать, но и править почти каждый файл.

Чтоб вы поняли уровень задачи - смешать говяжий фарш сосвиным может любой. а вот чтоб на выходе получился теленок с поросячьей головой - искусство нужно. А чтоб оно после этой операции еще и бегало... :)))
А на что внимание обращать хоть?
 

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

★★★★✩✩✩
2 Авг 2018
727
208
А на что внимание обращать хоть?
Забей. У тебя не хватает квалификации даже чтобы понять сложность задачи. Чтоб объединить два скетча, тебе надо четко разбираться, как работает каждый из них. Прям каждую строчку понимать. Тебе всё хочется как-нибудь попыренкому, покажите мне волшебный способ, чтоб вжух и готово. Хрен тебе.
 
  • Лойс +1
Реакции: Nikanor и Roden

ATEMY

✩✩✩✩✩✩✩
1 Дек 2020
24
0
Забей. У тебя не хватает квалификации даже чтобы понять сложность задачи. Чтоб объединить два скетча, тебе надо четко разбираться, как работает каждый из них. Прям каждую строчку понимать. Тебе всё хочется как-нибудь попыренкому, покажите мне волшебный способ, чтоб вжух и готово. Хрен тебе.
Та ну по быренькому никто и не говорит. Я думал может это по проще как-то, а вот тут реально хрен мне.

Читал про dualboot, так там тоже нужно микруху внешнюю eeprom паять. А если ехать в другой город за микрухой, смотрю мне проще будет купить ещё одну Nano и переключать Vcc тумблером между двумя ардуинками.
 

sooloon

✩✩✩✩✩✩✩
22 Апр 2020
3
0
для начала можешь взяв за основу скетч с цветомузыкой попробовать увеличить число режимов (#define MODE_AMOUNT) и в главном цикле (void mainLoop()) добавить обработчики этих режимов. Например:
C++:
      // сплошные цвета

      if (this_mode >= 9 && this_mode < 18){

        byte HUEindex = 0;

   

        switch (this_mode) {

            case 9:

                HUEindex = HUE_RED;

                break;

            case 10:

                HUEindex = HUE_ORANGE;

                break;

            case 11:

                HUEindex = HUE_ORANGE;

                break;

            case 12:

                HUEindex = HUE_YELLOW;

                break;

            case 13:

                HUEindex = HUE_GREEN;

                break;

            case 14:

                HUEindex = HUE_AQUA;

                break;

            case 15:

                HUEindex = HUE_BLUE;

                break;

            case 16:

                HUEindex = HUE_PURPLE;

                break;

            case 17:

                HUEindex = HUE_PINK;

                break;

        }

        for (int i = 0; i < NUM_LEDS; i++)

            leds = CHSV(HUEindex, 255, 255);

      }

потом можно простые эффекты добавить:
C++:
          if (millis() - rainbow_timer > 30) {

            rainbow_timer = millis();

            this_color += RAINBOW_PERIOD;

            if (this_color > 255) this_color = 0;

            if (this_color < 0) this_color = 255;

          }

          rainbow_steps = this_color;

          for (int i = 0; i < NUM_LEDS; i++) {

            leds = CHSV((int)floor(rainbow_steps), 255, 255);

            rainbow_steps += RAINBOW_STEP_2;

            if (rainbow_steps > 255) rainbow_steps = 0;

            if (rainbow_steps < 0) rainbow_steps = 255;

          }

C++:
          if (millis() - color_timer > COLOR_SPEED) {

            color_timer = millis();

            if (++this_color > 255) this_color = 0;

          }

          for (int i = 0; i < NUM_LEDS; i++) leds = CHSV(this_color, LIGHT_SAT, 255);


ну и потом потихоньку остальное перетащить.
На всякий случай прикрепляю мой скетч. Кривенький но на безрыбье и рак рыба :)
 

Вложения

Изменено: