Оптимизация и интеграция кода

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

Добрый вечер, форумчане!

В программировании ардуино еще зеленый. И на форуме тоже первый день, не бейте пожалуйста, если что-то оформлено не правильно.

Имеется собранный каркас куба, с приклеенными на его грани кусками адресной ленты, соединенными последовательно по три куска в одном углу и еще три в противоположном. Вот так.

Так же имеется ардуина. Схема подключения такова.

Собственноручно реализовал эффект, который хотел(удивительно, но он работает несмотря на то, что это мой первый опыт). Ниже прикладываю видео с демонстрацией(понимаю, что из-за зеркал непонятно, что происходит, но если вкратце, лента зажигается в одном углу и бежит в противоположный)

1 видео: https://drive.google.com/file/d/1cbu9K5tcB2_YgmXz3-l2ZJUH7JqAoYYW/view?usp=sharing

2 видео: https://drive.google.com/file/d/1Es5rnmKXaaShKaNSy3ybSRSOtN6R1z3O/view?usp=sharing

и сам код.

#define LED_DI 6
#define BRIGHT 255
#define CUR_LIMIT 2000

#include <FastLED.h>
const int NUM_LEDS = 240;
CRGBPalette16 currentPalette;
CRGB leds[NUM_LEDS];
CRGB color;
unsigned long timing = 0;
unsigned long timing2 = 0;
unsigned long timing3 = 0;
byte thisRow = 0;
byte blackRow = 0;
byte thisRow2 = 0;
byte blackRow2 = 0;
byte thisRow3 = 0;
byte blackRow3 = 0;
byte count = 0;
byte stripBright = 10;

void setup() {
  Serial.begin(9600);
  FastLED.addLeds<WS2812, LED_DI, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  if (CUR_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CUR_LIMIT);
  FastLED.setBrightness(255);
  FastLED.clear();
  currentPalette = CRGB(252, 3, 152);
}

void loop() {
  count += 3;

  if (thisRow <= 16) {                                         //первые три грани
    if (millis() - timing > 40) {
      timing = millis();
      if (thisRow <= 9) {
        firstEdges(ColorFromPalette(currentPalette, 1, stripBright, LINEARBLEND), thisRow);
      }
      if (thisRow >= 3) {
        firstEdges(CRGB(0, 0, 0), blackRow);
        blackRow += 1;
      }
      thisRow += 1;
      stripBright += 2;
    }
  }

  if (thisRow > 10 && thisRow2 <= 16) {                        //вторые шесть граней
    if (millis() - timing2 > 40) {
      timing2 = millis();
      if (thisRow2 <= 9) {
        secondEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow2);
      }
      if (thisRow2 >= 3) {
        secondEdges(CRGB(0, 0, 0), blackRow2);
        blackRow2 += 1;
      }
      thisRow2 += 1;
      stripBright += 3;
    }
  }

  if (thisRow > 10 && thisRow2 > 10 && thisRow3 <= 16) {       //третие три грани
    if (millis() - timing3 > 40) {
      timing3 = millis();
      if (thisRow3 <= 9) {
        thirstEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow3);
      }
      if (thisRow3 >= 3) {
        thirstEdges(CRGB(0, 0, 0), blackRow3);
        blackRow3 += 1;
      }
      thisRow3 += 1;
      stripBright += 5;
    }
  }

  if (thisRow >= 16 && thisRow2 >= 16 && thisRow3 >= 16) {       //обнуление переменных
    timing = 0;
    timing2 = 0;
    timing3 = 0;
    thisRow = 0;
    thisRow2 = 0;
    thisRow3 = 0;
    blackRow = 0;
    blackRow2 = 0;
    blackRow3 = 0;
    stripBright = 10;
    count = 0;
  }
  //delay(200);
  Serial.println(thisRow2);
}

void firstEdges(CRGB colorStrip, byte blackRow) {
  leds[40 + blackRow] = colorStrip;   // передняя левая
  leds[39 - blackRow] = colorStrip;   // передняя правая
  leds[79 - blackRow] = colorStrip;   // нижняя левая   (верхняя)
  leds[80 + blackRow] = colorStrip;   // нижняя левая   (нижняя)
  leds[0 + blackRow] = colorStrip;    // нижняя правая  (верхняя)
  leds[119 - blackRow] = colorStrip;  // нижняя правая  (нижняя)
  FastLED.show();
}

void secondEdges(CRGB colorStrip2, byte blackRow2) {
  leds[179 - blackRow2] = colorStrip2;  // нижняя левая   (верхняя)
  leds[90 + blackRow2] = colorStrip2;   // нижняя левая   (нижняя)
  leds[140 + blackRow2] = colorStrip2;  // нижняя правая  (верхняя)
  leds[109 - blackRow2] = colorStrip2;  // нижняя правая  (нижняя)
  leds[219 - blackRow2] = colorStrip2;  // верхняя левая  (верхняя)
  leds[50 + blackRow2] = colorStrip2;   // верхняя левая  (нижняя)
  leds[220 + blackRow2] = colorStrip2;  // верхняя правая (верхняя)
  leds[29 - blackRow2] = colorStrip2;   // верхняя правая (нижняя)
  leds[69 - blackRow2] = colorStrip2;   // боковая левая  (ближняя)
  leds[180 + blackRow2] = colorStrip2;  // боковая левая  (дальняя)
  leds[10 + blackRow2] = colorStrip2;   // боковая правая (ближняя)
  leds[139 - blackRow2] = colorStrip2;  // боковая правая (дальняя)
  FastLED.show();
}

void thirstEdges(CRGB colorStrip3, byte blackRow3) {
  leds[169 - blackRow3] = colorStrip3;  // задняя левая
  leds[150 + blackRow3] = colorStrip3;  // задняя правая
  leds[209 - blackRow3] = colorStrip3;  // верхняя левая  (верхняя)
  leds[190 + blackRow3] = colorStrip3;  // верхняя левая  (нижняя)
  leds[230 + blackRow3] = colorStrip3;  // верхняя правая (верхняя)
  leds[129 - blackRow3] = colorStrip3;  // верхняя правая (нижняя)
  FastLED.show();
}

Так же имеется скопипастнутый код с набором эффектов для ленты, разбитый на три файла.

Первый.

/*
  Скетч создан на основе FASTSPI2 EFFECTS EXAMPLES автора teldredge (www.funkboxing.com)
  А также вот этой статьи https://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/...
  Доработан, переведён и разбит на файлы 2017 AlexGyver
  Смена выбранных режимов кнопкой. Кнопка подключена на D2 и GND
*/

#include "FastLED.h"          // библиотека для работы с лентой

#define LED_COUNT 40          // число светодиодов в кольце/ленте
#define LED_DT 6             // пин, куда подключен DIN ленты

int max_bright = 255;          // максимальная яркость (0 - 255)
boolean adapt_light = 1;       // адаптивная подсветка (1 - включить, 0 - выключить)

byte fav_modes[] = {2, 11, 14, 25, 27, 30, 41};  // список "любимых" режимов
byte num_modes = sizeof(fav_modes);         // получить количество "любимых" режимов (они все по 1 байту..)
unsigned long change_time, last_change, last_bright;
int new_bright;

volatile byte ledMode = 3;
/*
  Стартовый режим
  0 - все выключены
  1 - все включены
  3 - кольцевая радуга
  888 - демо-режим
*/

// цвета мячиков для режима
byte ballColors[3][3] = {
  {0xff, 0, 0},
  {0xff, 0xff, 0xff},
  {0   , 0   , 0xff}
};

// ---------------СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ-----------------
int BOTTOM_INDEX = 0;        // светодиод начала отсчёта
int TOP_INDEX = int(LED_COUNT / 2);
int EVENODD = LED_COUNT % 2;
struct CRGB leds[LED_COUNT];
int ledsX[LED_COUNT][3];     //-ARRAY FOR COPYING WHATS IN THE LED STRIP CURRENTLY (FOR CELL-AUTOMATA, MARCH, ETC)

int thisdelay = 20;          //-FX LOOPS DELAY VAR
int thisstep = 10;           //-FX LOOPS DELAY VAR
int thishue = 0;             //-FX LOOPS DELAY VAR
int thissat = 255;           //-FX LOOPS DELAY VAR

int thisindex = 0;
int thisRED = 0;
int thisGRN = 0;
int thisBLU = 0;

const int NUM_LEDS = 240;
CRGBPalette16 currentPalette;
unsigned long timing = 0;
unsigned long timing2 = 0;
unsigned long timing3 = 0;
byte thisRow = 0;
byte blackRow = 0;
byte thisRow2 = 0;
byte blackRow2 = 0;
byte thisRow3 = 0;
byte blackRow3 = 0;
byte count = 0;
byte stripBright = 10;

int idex = 0;                //-LED INDEX (0 to LED_COUNT-1
int ihue = 0;                //-HUE (0-255)
int ibright = 0;             //-BRIGHTNESS (0-255)
int isat = 0;                //-SATURATION (0-255)
int bouncedirection = 0;     //-SWITCH FOR COLOR BOUNCE (0-1)
float tcount = 0.0;          //-INC VAR FOR SIN LOOPS
int lcount = 0;              //-ANOTHER COUNTING VAR

volatile uint32_t btnTimer;
volatile byte modeCounter;
volatile boolean changeFlag;
// ---------------СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ-----------------


void setup()
{
  Serial.begin(9600);              // открыть порт для связи
  LEDS.setBrightness(max_bright);  // ограничить максимальную яркость

  LEDS.addLeds<WS2811, LED_DT, GRB>(leds, LED_COUNT);  // настрйоки для нашей ленты (ленты на WS2811, WS2812, WS2812B)
  one_color_all(0, 0, 0);          // погасить все светодиоды
  LEDS.show();                     // отослать команду

  randomSeed(analogRead(0));
  pinMode(2, INPUT_PULLUP);
  pinMode(A3, INPUT);     // к входу A3 подключаем потенциометр
  attachInterrupt(0, btnISR, FALLING);
}

void one_color_all(int cred, int cgrn, int cblu) {       //-SET ALL LEDS TO ONE COLOR
  for (int i = 0 ; i < LED_COUNT; i++ ) {
    leds[i].setRGB( cred, cgrn, cblu);
  }
}

void loop() {
  if (adapt_light) {                        // если включена адаптивная яркость
    if (millis() - last_bright > 5) {     // каждые полсекунды
      last_bright = millis();               // сброить таймер
      int val = analogRead(A3); // считываем данные с порта A1
      val = val / 4;                      // делим значения на 4
      new_bright = val;
      LEDS.setBrightness(new_bright);        // установить новую яркость
    }
  }


  if (Serial.available() > 0) { // если что то прислали
    int slk = Serial.parseInt(); // парсим в тип данных int
    if (slk != 0) {
      ledMode = slk;
      Serial.println(ledMode);
      change_mode(ledMode); // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
    }
  }

  switch (ledMode) {
    case 999: break;                           // пазуа
    // case  2: rainbow_fade(); break;              // Радуга */
    case  3: rainbow_loop(); break;            // крутящаяся радуга +
    /*  case  4: random_burst(); break;            // случайная смена цветов */
    case  5: color_bounce(); break;            // бегающий светодиод +
    case  6: color_bounceFADE(); break;        // бегающий паровозик светодиодов +
    case  7: pinkFlower(); break;           // вращаются красный и синий
    //  case  8: ems_lightsALL(); break;           // вращается половина красных и половина синих */
    case  9: flicker(); break;                 // случайный стробоскоп +
    /* case 10: pulse_one_color_all(); break;     // пульсация одним цветом
       case 11: pulse_one_color_all_rev(); break; // пульсация со сменой цветов
       case 12: fade_vertical(); break;           // плавная смена яркости по вертикали (для кольца) */
    case 13: rule30(); break;                  // безумие красных светодиодов +
    case 14: random_march(); break;            // безумие случайных цветов +
    /* case 15: rwb_march(); break;               // белый синий красный бегут по кругу (ПАТРИОТИЗМ!)
       case 16: radiation(); break;               // пульсирует значок радиации
       case 17: color_loop_vardelay(); break;     // красный светодиод бегает по кругу
           case 18: white_temps(); break;             // бело синий градиент (?)
           case 19: sin_bright_wave(); break;         // тоже хрень какая то
           case 20: pop_horizontal(); break;          // красные вспышки спускаются вниз
           case 21: quad_bright_curve(); break;       // полумесяц
           case 22: flame(); break;                   // эффект пламени
           case 23: rainbow_vertical(); break;        // радуга в вертикаьной плоскости (кольцо)
           case 24: pacman(); break;                  // пакман */
    case 25: random_color_pop(); break;        // безумие случайных вспышек +
    /*  case 26: ems_lightsSTROBE(); break;        // полицейская мигалка
        case 27: rgb_propeller(); break;           // RGB пропеллер */
    case 28: kitt(); break;                    // случайные вспышки красного в вертикаьной плоскости +
    case 29: matrix(); break;                  // зелёненькие бегают по кругу случайно +
    /*    case 30: new_rainbow_loop(); break;        // крутая плавная вращающаяся радуга
        case 31: strip_march_ccw(); break;         // чёт сломалось
        case 32: strip_march_cw(); break;          // чёт сломалось
        case 33: colorWipe(0x00, 0xff, 0x00, thisdelay);
          colorWipe(0x00, 0x00, 0x00, thisdelay); break;                                // плавное заполнение цветом */
    case 34: CylonBounce(0xff, 0, 0, 4, 10, thisdelay); break;                      // бегающие светодиоды +
    /*    case 35: Fire(55, 120, thisdelay); break;                                       // линейный огонь
        case 36: NewKITT(0xff, 0, 0, 8, 10, thisdelay); break;                          // беготня секторов круга (не работает) */
    case 37: rainbowCycle(thisdelay); break;                                        // очень плавная вращающаяся радуга +
    /*    case 38: TwinkleRandom(20, thisdelay, 1); break;                                // случайные разноцветные включения (1 - танцуют все, 0 - случайный 1 диод)
        case 39: RunningLights(0xff, 0xff, 0x00, thisdelay); break;                     // бегущие огни
        case 40: Sparkle(0xff, 0xff, 0xff, thisdelay); break;                           // случайные вспышки белого цвета */
    case 41: SnowSparkle(0x10, 0x10, 0x10, thisdelay, random(100, 1000)); break;    // случайные вспышки белого цвета на белом фоне +
    /*    case 42: theaterChase(0xff, 0, 0, thisdelay); break;                            // бегущие каждые 3 (ЧИСЛО СВЕТОДИОДОВ ДОЛЖНО БЫТЬ КРАТНО 3) */
    case 43: theaterChaseRainbow(thisdelay); break;                                 // бегущие каждые 3 радуга (ЧИСЛО СВЕТОДИОДОВ ДОЛЖНО БЫТЬ КРАТНО 3) +
      /*    case 44: Strobe(0xff, 0xff, 0xff, 10, thisdelay, 1000); break;                  // стробоскоп

          case 45: BouncingBalls(0xff, 0, 0, 3); break;                                   // прыгающие мячики
          case 46: BouncingColoredBalls(3, ballColors); break;                            // прыгающие мячики цветные

          case 888: demo_modeA(); break;             // длинное демо
          case 889: demo_modeB(); break;             // короткое демо */
  }
}

void btnISR() {
  if (millis() - btnTimer > 500) {
    btnTimer = millis();  // защита от дребезга
    if (++modeCounter >= num_modes) modeCounter = 0;
    ledMode = fav_modes[modeCounter];    // получаем новый номер следующего режима
    change_mode(ledMode);               // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
    changeFlag = true;
  }
}

void change_mode(int newmode) {
  thissat = 255;
  switch (newmode) {
    case 0: one_color_all(0, 0, 0); LEDS.show(); break; //---ALL OFF
    case 1: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL ON
    case 2: thisdelay = 60; break;                      //---STRIP RAINBOW FADE
    case 3: thisdelay = 20; thisstep = 10; break;       //---RAINBOW LOOP
    case 4: thisdelay = 20; break;                      //---RANDOM BURST
    case 5: thisdelay = 20; thishue = 0; break;         //---CYLON v1
    case 6: thisdelay = 80; thishue = 0; break;         //---CYLON v2
    case 7: thisdelay = 40; thishue = 0; break;         //---POLICE LIGHTS SINGLE
    case 8: thisdelay = 40; thishue = 0; break;         //---POLICE LIGHTS SOLID
    case 9: thishue = 160; thissat = 50; break;         //---STRIP FLICKER
    case 10: thisdelay = 15; thishue = 0; break;        //---PULSE COLOR BRIGHTNESS
    case 11: thisdelay = 30; thishue = 0; break;        //---PULSE COLOR SATURATION
    case 12: thisdelay = 60; thishue = 180; break;      //---VERTICAL SOMETHING
    case 13: thisdelay = 100; break;                    //---CELL AUTO - RULE 30 (RED)
    case 14: thisdelay = 80; break;                     //---MARCH RANDOM COLORS
    case 15: thisdelay = 80; break;                     //---MARCH RWB COLORS
    case 16: thisdelay = 60; thishue = 95; break;       //---RADIATION SYMBOL
    //---PLACEHOLDER FOR COLOR LOOP VAR DELAY VARS
    case 19: thisdelay = 35; thishue = 180; break;      //---SIN WAVE BRIGHTNESS
    case 20: thisdelay = 100; thishue = 0; break;       //---POP LEFT/RIGHT
    case 21: thisdelay = 100; thishue = 180; break;     //---QUADRATIC BRIGHTNESS CURVE
    //---PLACEHOLDER FOR FLAME VARS
    case 23: thisdelay = 50; thisstep = 15; break;      //---VERITCAL RAINBOW
    case 24: thisdelay = 50; break;                     //---PACMAN
    case 25: thisdelay = 35; break;                     //---RANDOM COLOR POP
    case 26: thisdelay = 25; thishue = 0; break;        //---EMERGECNY STROBE
    case 27: thisdelay = 100; thishue = 0; break;        //---RGB PROPELLER
    case 28: thisdelay = 100; thishue = 0; break;       //---KITT
    case 29: thisdelay = 100; thishue = 95; break;       //---MATRIX RAIN
    case 30: thisdelay = 15; break;                      //---NEW RAINBOW LOOP
    case 31: thisdelay = 100; break;                    //---MARCH STRIP NOW CCW
    case 32: thisdelay = 100; break;                    //---MARCH STRIP NOW CCW
    case 33: thisdelay = 50; break;                     // colorWipe
    case 34: thisdelay = 50; break;                     // CylonBounce
    case 35: thisdelay = 15; break;                     // Fire
    case 36: thisdelay = 50; break;                     // NewKITT
    case 37: thisdelay = 20; break;                     // rainbowCycle
    case 38: thisdelay = 10; break;                     // rainbowTwinkle
    case 39: thisdelay = 50; break;                     // RunningLights
    case 40: thisdelay = 0; break;                      // Sparkle
    case 41: thisdelay = 30; break;                     // SnowSparkle
    case 42: thisdelay = 50; break;                     // theaterChase
    case 43: thisdelay = 50; break;                     // theaterChaseRainbow
    case 44: thisdelay = 100; break;                    // Strobe

    case 101: one_color_all(255, 0, 0); LEDS.show(); break; //---ALL RED
    case 102: one_color_all(0, 255, 0); LEDS.show(); break; //---ALL GREEN
    case 103: one_color_all(0, 0, 255); LEDS.show(); break; //---ALL BLUE
    case 104: one_color_all(255, 255, 0); LEDS.show(); break; //---ALL COLOR X
    case 105: one_color_all(0, 255, 255); LEDS.show(); break; //---ALL COLOR Y
    case 106: one_color_all(255, 0, 255); LEDS.show(); break; //---ALL COLOR Z
  }
  bouncedirection = 0;
  one_color_all(0, 0, 0);
  ledMode = newmode;
}

Второй.

//------------------------LED EFFECT FUNCTIONS------------------------


void one_color_allHSV(int ahue) {    //-SET ALL LEDS TO ONE COLOR (HSV)
  for (int i = 0 ; i < LED_COUNT; i++ ) {
    leds[i] = CHSV(ahue, thissat, 255);
  }
}

void rainbow_loop() {                        //-m3-LOOP HSV RAINBOW
  idex++;
  ihue = ihue + thisstep;
  if (idex >= LED_COUNT) {
    idex = 0;
  }
  if (ihue > 255) {
    ihue = 0;
  }
  leds[idex] = CHSV(ihue, thissat, 255);
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void color_bounce() {                        //-m5-BOUNCE COLOR (SINGLE LED)
  if (bouncedirection == 0) {
    idex = idex + 1;
    if (idex == LED_COUNT) {
      bouncedirection = 1;
      idex = idex - 1;
    }
  }
  if (bouncedirection == 1) {
    idex = idex - 1;
    if (idex == 0) {
      bouncedirection = 0;
    }
  }
  for (int i = 0; i < LED_COUNT; i++ ) {
    if (i == idex) {
      leds[i] = CHSV(thishue, thissat, 255);
    }
    else {
      leds[i] = CHSV(0, 0, 0);
    }
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}

void color_bounceFADE() {                    //-m6-BOUNCE COLOR (SIMPLE MULTI-LED FADE)
  if (bouncedirection == 0) {
    idex = idex + 1;
    if (idex == LED_COUNT) {
      bouncedirection = 1;
      idex = idex - 1;
    }
  }
  if (bouncedirection == 1) {
    idex = idex - 1;
    if (idex == 0) {
      bouncedirection = 0;
    }
  }
  int iL1 = adjacent_cw(idex);
  int iL2 = adjacent_cw(iL1);
  int iL3 = adjacent_cw(iL2);
  int iR1 = adjacent_ccw(idex);
  int iR2 = adjacent_ccw(iR1);
  int iR3 = adjacent_ccw(iR2);
  for (int i = 0; i < LED_COUNT; i++ ) {
    if (i == idex) {
      leds[i] = CHSV(thishue, thissat, 255);
    }
    else if (i == iL1) {
      leds[i] = CHSV(thishue, thissat, 150);
    }
    else if (i == iL2) {
      leds[i] = CHSV(thishue, thissat, 80);
    }
    else if (i == iL3) {
      leds[i] = CHSV(thishue, thissat, 20);
    }
    else if (i == iR1) {
      leds[i] = CHSV(thishue, thissat, 150);
    }
    else if (i == iR2) {
      leds[i] = CHSV(thishue, thissat, 80);
    }
    else if (i == iR3) {
      leds[i] = CHSV(thishue, thissat, 20);
    }
    else {
      leds[i] = CHSV(0, 0, 0);
    }
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void flicker() {                          //-m9-FLICKER EFFECT
  int random_bright = random(0, 255);
  int random_delay = random(10, 100);
  int random_bool = random(0, random_bright);
  if (random_bool < 10) {
    for (int i = 0 ; i < LED_COUNT; i++ ) {
      leds[i] = CHSV(thishue, thissat, random_bright);
    }
    LEDS.show();
    if (safeDelay(random_delay)) return;
  }
}



void random_red() {                       //QUICK 'N DIRTY RANDOMIZE TO GET CELL AUTOMATA STARTED
  int temprand;
  for (int i = 0; i < LED_COUNT; i++ ) {
    temprand = random(0, 100);
    if (temprand > 50) {
      leds[i].r = 255;
    }
    if (temprand <= 50) {
      leds[i].r = 0;
    }
    leds[i].b = 0; leds[i].g = 0;
  }
  LEDS.show();
}

void rule30() {                          //-m13-1D CELLULAR AUTOMATA - RULE 30 (RED FOR NOW)
  if (bouncedirection == 0) {
    random_red();
    bouncedirection = 1;
  }
  copy_led_array();
  int iCW;
  int iCCW;
  int y = 100;
  for (int i = 0; i < LED_COUNT; i++ ) {
    iCW = adjacent_cw(i);
    iCCW = adjacent_ccw(i);
    if (ledsX[iCCW][0] > y && ledsX[i][0] > y && ledsX[iCW][0] > y) {
      leds[i].r = 0;
    }
    if (ledsX[iCCW][0] > y && ledsX[i][0] > y && ledsX[iCW][0] <= y) {
      leds[i].r = 0;
    }
    if (ledsX[iCCW][0] > y && ledsX[i][0] <= y && ledsX[iCW][0] > y) {
      leds[i].r = 0;
    }
    if (ledsX[iCCW][0] > y && ledsX[i][0] <= y && ledsX[iCW][0] <= y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] > y && ledsX[iCW][0] > y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] > y && ledsX[iCW][0] <= y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] <= y && ledsX[iCW][0] > y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] <= y && ledsX[iCW][0] <= y) {
      leds[i].r = 0;
    }
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}

void random_march() {                   //-m14-RANDOM MARCH CCW
  copy_led_array();
  int iCCW;
  leds[0] = CHSV(random(0, 255), 255, 255);
  for (int idex = 1; idex < LED_COUNT ; idex++ ) {
    iCCW = adjacent_ccw(idex);
    leds[idex].r = ledsX[iCCW][0];
    leds[idex].g = ledsX[iCCW][1];
    leds[idex].b = ledsX[iCCW][2];
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void random_color_pop() {                         //-m25-RANDOM COLOR POP
  idex = random(0, LED_COUNT);
  ihue = random(0, 255);
  one_color_all(0, 0, 0);
  leds[idex] = CHSV(ihue, thissat, 255);
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void kitt() {                                     //-m28-KNIGHT INDUSTIES 2000
  int rand = random(0, TOP_INDEX);
  for (int i = 0; i < rand; i++ ) {
    leds[TOP_INDEX + i] = CHSV(thishue, thissat, 255);
    leds[TOP_INDEX - i] = CHSV(thishue, thissat, 255);
    LEDS.show();
    if (safeDelay(thisdelay / rand)) return;
  }
  for (int i = rand; i > 0; i-- ) {
    leds[TOP_INDEX + i] = CHSV(thishue, thissat, 0);
    leds[TOP_INDEX - i] = CHSV(thishue, thissat, 0);
    LEDS.show();
    if (safeDelay(thisdelay / rand)) return;
  }
}

void matrix() {                                   //-m29-ONE LINE MATRIX
  int rand = random(0, 100);
  if (rand > 90) {
    leds[0] = CHSV(thishue, thissat, 255);
  }
  else {
    leds[0] = CHSV(thishue, thissat, 0);
  }
  copy_led_array();
  for (int i = 1; i < LED_COUNT; i++ ) {
    leds[i].r = ledsX[i - 1][0];
    leds[i].g = ledsX[i - 1][1];
    leds[i].b = ledsX[i - 1][2];
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



//-----------------------------------бегающие светодиоды-----------------------------------
void CylonBounce(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {

  for (int i = 0; i < LED_COUNT - EyeSize - 2; i++) {
    setAll(0, 0, 0);
    setPixel(i, red / 10, green / 10, blue / 10);
    for (int j = 1; j <= EyeSize; j++) {
      setPixel(i + j, red, green, blue);
    }
    setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
    FastLED.show();
    if (safeDelay(SpeedDelay)) return;
  }

  if (safeDelay(ReturnDelay)) return;

  for (int i = LED_COUNT - EyeSize - 2; i > 0; i--) {
    setAll(0, 0, 0);
    setPixel(i, red / 10, green / 10, blue / 10);
    for (int j = 1; j <= EyeSize; j++) {
      setPixel(i + j, red, green, blue);
    }
    setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
    FastLED.show();
    if (safeDelay(SpeedDelay)) return;
  }

  if (safeDelay(ReturnDelay)) return;
}


//-------------------------------newKITT---------------------------------------
void rainbowCycle(int SpeedDelay) {
  byte *c;
  uint16_t i, j;

  for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < LED_COUNT; i++) {
      c = Wheel(((i * 256 / LED_COUNT) + j) & 255);
      setPixel(i, *c, *(c + 1), *(c + 2));
    }
    FastLED.show();
    if (safeDelay(SpeedDelay)) return;
  }
}

byte * Wheel(byte WheelPos) {
  static byte c[3];

  if (WheelPos < 85) {
    c[0] = WheelPos * 3;
    c[1] = 255 - WheelPos * 3;
    c[2] = 0;
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    c[0] = 255 - WheelPos * 3;
    c[1] = 0;
    c[2] = WheelPos * 3;
  } else {
    WheelPos -= 170;
    c[0] = 0;
    c[1] = WheelPos * 3;
    c[2] = 255 - WheelPos * 3;
  }

  return c;
}


//-------------------------------SnowSparkle---------------------------------------
void SnowSparkle(byte red, byte green, byte blue, int SparkleDelay, int SpeedDelay) {
  setAll(red, green, blue);

  int Pixel = random(LED_COUNT);
  setPixel(Pixel, 0xff, 0xff, 0xff);
  FastLED.show();
  if (safeDelay(SparkleDelay)) return;
  setPixel(Pixel, red, green, blue);
  FastLED.show();
  if (safeDelay(SpeedDelay)) return;
}



//-------------------------------theaterChaseRainbow---------------------------------------
void theaterChaseRainbow(int SpeedDelay) {
  byte *c;

  for (int j = 0; j < 256; j++) {   // cycle all 256 colors in the wheel
    for (int q = 0; q < 3; q++) {
      for (int i = 0; i < LED_COUNT; i = i + 3) {
        c = Wheel( (i + j) % 255);
        setPixel(i + q, *c, *(c + 1), *(c + 2)); //turn every third pixel on
      }
      FastLED.show();
      if (safeDelay(SpeedDelay)) return;
      for (int i = 0; i < LED_COUNT; i = i + 3) {
        setPixel(i + q, 0, 0, 0);    //turn every third pixel off
      }
    }
  }
}


//------------------------------------PinkFlower--------------------------------------------
void pinkFlower() {
  count += 3;

  if (thisRow <= 16) {                                         //первые три грани
    if (millis() - timing > 40) {
      timing = millis();
      if (thisRow <= 9) {
        firstEdges(ColorFromPalette(currentPalette, 1, stripBright, LINEARBLEND), thisRow);
      }
      if (thisRow >= 3) {
        firstEdges(CRGB(0, 0, 0), blackRow);
        blackRow += 1;
      }
      thisRow += 1;
      stripBright += 2;
    }
  }

  if (thisRow > 10 && thisRow2 <= 16) {                        //вторые шесть граней
    if (millis() - timing2 > 40) {
      timing2 = millis();
      if (thisRow2 <= 9) {
        secondEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow2);
      }
      if (thisRow2 >= 3) {
        secondEdges(CRGB(0, 0, 0), blackRow2);
        blackRow2 += 1;
      }
      thisRow2 += 1;
      stripBright += 3;
    }
  }

  if (thisRow > 10 && thisRow2 > 10 && thisRow3 <= 16) {       //третие три грани
    if (millis() - timing3 > 40) {
      timing3 = millis();
      if (thisRow3 <= 9) {
        thirstEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow3);
      }
      if (thisRow3 >= 3) {
        thirstEdges(CRGB(0, 0, 0), blackRow3);
        blackRow3 += 1;
      }
      thisRow3 += 1;
      stripBright += 5;
    }
  }

  if (thisRow >= 16 && thisRow2 >= 16 && thisRow3 >= 16) {       //обнуление переменных
    timing = 0;
    timing2 = 0;
    timing3 = 0;
    thisRow = 0;
    thisRow2 = 0;
    thisRow3 = 0;
    blackRow = 0;
    blackRow2 = 0;
    blackRow3 = 0;
    stripBright = 10;
    count = 0;
  }
  if (safeDelay(thisdelay)) return;
}

void firstEdges(CRGB colorStrip, byte blackRow) {
  leds[40 + blackRow] = colorStrip;   // передняя левая
  leds[39 - blackRow] = colorStrip;   // передняя правая
  leds[79 - blackRow] = colorStrip;   // нижняя левая   (верхняя)
  leds[80 + blackRow] = colorStrip;   // нижняя левая   (нижняя)
  leds[0 + blackRow] = colorStrip;    // нижняя правая  (верхняя)
  leds[119 - blackRow] = colorStrip;  // нижняя правая  (нижняя)
  FastLED.show();
}

void secondEdges(CRGB colorStrip2, byte blackRow2) {
  leds[179 - blackRow2] = colorStrip2;  // нижняя левая   (верхняя)
  leds[90 + blackRow2] = colorStrip2;   // нижняя левая   (нижняя)
  leds[140 + blackRow2] = colorStrip2;  // нижняя правая  (верхняя)
  leds[109 - blackRow2] = colorStrip2;  // нижняя правая  (нижняя)
  leds[219 - blackRow2] = colorStrip2;  // верхняя левая  (верхняя)
  leds[50 + blackRow2] = colorStrip2;   // верхняя левая  (нижняя)
  leds[220 + blackRow2] = colorStrip2;  // верхняя правая (верхняя)
  leds[29 - blackRow2] = colorStrip2;   // верхняя правая (нижняя)
  leds[69 - blackRow2] = colorStrip2;   // боковая левая  (ближняя)
  leds[180 + blackRow2] = colorStrip2;  // боковая левая  (дальняя)
  leds[10 + blackRow2] = colorStrip2;   // боковая правая (ближняя)
  leds[139 - blackRow2] = colorStrip2;  // боковая правая (дальняя)
  FastLED.show();
}

void thirstEdges(CRGB colorStrip3, byte blackRow3) {
  leds[169 - blackRow3] = colorStrip3;  // задняя левая
  leds[150 + blackRow3] = colorStrip3;  // задняя правая
  leds[209 - blackRow3] = colorStrip3;  // верхняя левая  (верхняя)
  leds[190 + blackRow3] = colorStrip3;  // верхняя левая  (нижняя)
  leds[230 + blackRow3] = colorStrip3;  // верхняя правая (верхняя)
  leds[129 - blackRow3] = colorStrip3;  // верхняя правая (нижняя)
  FastLED.show();
}


boolean safeDelay(int delTime) {
  uint32_t thisTime = millis();
  while (millis() - thisTime <= delTime) {
    if (changeFlag) {
      changeFlag = false;
      return true;
    }
  }
  return false;
}

Третий.

//------------------------------------- UTILITY FXNS --------------------------------------
//---SET THE COLOR OF A SINGLE RGB LED
void set_color_led(int adex, int cred, int cgrn, int cblu) {
  leds[adex].setRGB( cred, cgrn, cblu);
}

//---FIND INDEX OF HORIZONAL OPPOSITE LED
int horizontal_index(int i) {
  //-ONLY WORKS WITH INDEX < TOPINDEX
  if (i == BOTTOM_INDEX) {
    return BOTTOM_INDEX;
  }
  if (i == TOP_INDEX && EVENODD == 1) {
    return TOP_INDEX + 1;
  }
  if (i == TOP_INDEX && EVENODD == 0) {
    return TOP_INDEX;
  }
  return LED_COUNT - i;
}

//---FIND INDEX OF ANTIPODAL OPPOSITE LED
int antipodal_index(int i) {
  int iN = i + TOP_INDEX;
  if (i >= TOP_INDEX) {
    iN = ( i + TOP_INDEX ) % LED_COUNT;
  }
  return iN;
}

//---FIND ADJACENT INDEX CLOCKWISE
int adjacent_cw(int i) {
  int r;
  if (i < LED_COUNT - 1) {
    r = i + 1;
  }
  else {
    r = 0;
  }
  return r;
}

//---FIND ADJACENT INDEX COUNTER-CLOCKWISE
int adjacent_ccw(int i) {
  int r;
  if (i > 0) {
    r = i - 1;
  }
  else {
    r = LED_COUNT - 1;
  }
  return r;
}

void copy_led_array() {
  for (int i = 0; i < LED_COUNT; i++ ) {
    ledsX[i][0] = leds[i].r;
    ledsX[i][1] = leds[i].g;
    ledsX[i][2] = leds[i].b;
  }
}

void setPixel(int Pixel, byte red, byte green, byte blue) {
  leds[Pixel].r = red;
  leds[Pixel].g = green;
  leds[Pixel].b = blue;
}

void setAll(byte red, byte green, byte blue) {
  for (int i = 0; i < LED_COUNT; i++ ) {
    setPixel(i, red, green, blue);
  }
  FastLED.show();
}

Прикрутил к нему смену яркости по потенциометру и, собственно, пытаюсь свой эффект добавить в один из кейсов, добавив тело во второй файл с функциями и прописав название функции в один из кейсов в первом файле. Все компилится нормально. При загрузке прошивки и переключении кейсов в порте работают все эффекты кроме моего. Когда я пытаюсь включить свой эффект(PinkFlower в коде с набором эффектов) - лента гаснет и все, при последующих попытках сменить эффект, никакого результата, ардуино просто не выходит из моего. Помогите пожалуйста разобраться в чем дело. И еще был бы крайне благодарен за советы по оптимизации кода. Заранее большое спасибо!

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

anatonokao пишет:

...
  Доработан, переведён и разбит на файлы 2017 AlexGyver
...

Для сексуальных утех с кодами данного автора существует специальный форум - https://community.alexgyver.ru/

Удачи Вам там!

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

ЕвгенийП пишет:

anatonokao пишет:

...
  Доработан, переведён и разбит на файлы 2017 AlexGyver
...

Для сексуальных утех с кодами данного автора существует специальный форум - https://community.alexgyver.ru/

Удачи Вам там!

Что не так? Поясните пожалуйста. Я не шарю.

rkit
Offline
Зарегистрирован: 23.11.2016

Просьбами привести в порядок традиционно низкокачественный код алекса, нужно засорять форум алекса, только и всего.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

anatonokao пишет:

Поясните пожалуйста. 

Каких пояснений Вы ждёте? Я Вам сказал, что для консультаций по коду этого автора есть специальный форум. И даже дал его (форума) адрес. Какое именно слово Вам в этой фразе непонятно?

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

Евгений, что Вам именно не понятно в вопросе, что не так с кодом алекса? Глядите, rkit сразу понял о чем я. Вы уверены, что это я что-то не понимаю?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

anatonokao пишет:

что не так с кодом алекса?

Всё так, просто для него есть специальный форум.

anatonokao пишет:

Вы уверены, что это я что-то не понимаю?

Нет, не уверен, просто поверил Вам, когда Вы сказали:

anatonokao пишет:

Поясните пожалуйста. Я не шарю.

Может и понимаете, просто пошутили, откуда ж мне знать?

lilik
Offline
Зарегистрирован: 19.10.2017

anatonokao пишет:

Евгений, что Вам именно не понятно в вопросе, что не так с кодом алекса? Глядите, rkit сразу понял о чем я. Вы уверены, что это я что-то не понимаю?

http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/redaktor-effek...

Как напрограммируете кучу своих эффектов и научитесь их перебирать кнопкой, блютусом и т.д. вам быстро поскучнеет. Вот тогда и надо Гайвера трясти что бы его программёры писали приложение на пк подобное как по моей ссылке. Это гораздо интереснее будет и Гайверу самому. Именно тогда для простых пользователей, не отягощённых программированием изделие это приобретёт черты законченного.

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

ЕвгенийП пишет:

Может и понимаете, просто пошутили, откуда ж мне знать?

То, что данного автора тут недолюбливают, я понял. У Вас же спрашивал причину.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

anatonokao пишет:

То, что данного автора тут недолюбливают, я понял. У Вас же спрашивал причину.

Как написал один иностранец в комментах под одним из видео Гайвера - "очень хороший блогер, никакой программист". Вот за вторую часть его здесь и недолюбливают ))

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

Так я же вроде и не говорю, что он хороший программист) Я всего лишь попросил взглянуть на код, так сказать, профессиональным взглядом и посоветовать в какую сторону копать, чтобы оно работало. На форуме гайвера помощь получить несколько проблематично.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

anatonokao пишет:
У Вас же спрашивал причину.
Да, много причин. Ну, вот, например. Хотя, главная причина в том, что очень уж часто появляются вопрошатели, которые скачают его кривой код, а потом тут всем мозг выносят, считая, что все здесь обязаны им "помогать". И чего к автору не идут? Мы то чем провинились?

Вот Вы пришли и просите "взглянуть на его код". И знаете сколько таких, как Вы? Нас что, суд приговорил на его коды постоянно взглядывать? Достало уже.

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

ЕвгенийП пишет:
всем мозг выносят
В таком случае, почему Вы до сих пор продолжаете отвечать в таких вопросах?)

ЕвгенийП пишет:
все здесь обязаны им "помогать"
Покажите-ка пожалуйста, где я написал, что мне кто-то тут обязан помогать, ну чтобы не быть голословным, да?)

ЕвгенийП пишет:
И чего к автору не идут
Я уже говорил выше о том, что на его форуме получить помощь не вышло, в следствии чего написал сюда.

ЕвгенийП пишет:
просите "взглянуть на его код"
В первую очередь я попросил взглянуть на мой код и объяснить, почему он не хочет работать в банальном switch case(который как раз уже в коде гайвера).

ЕвгенийП пишет:
Достало уже.
Опять же, зачем в таком случае портить себе настроение и продолжать отвечать в подобных темах?) В крайнем случае можно же вообще не заходить в этот раздел, который, кстати, называется >Раздел для новичков)

Евгений, Вы не подумайте, я не с агрессией. Читал Ваши сообщения на форуме (особенно запомнилось когда Вы человеку объясняли то, что ему нужно понять логику работы МК, раскладывая свою цель на простейшие действия), очень понравилось. Но мне кажется, что Вы несправедливо выплескиваете на меня желчь по этому поводу.

nik182
Offline
Зарегистрирован: 04.05.2015

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

b707
Offline
Зарегистрирован: 26.05.2017

anatonokao ну ты и зануда....

sadman41
Offline
Зарегистрирован: 19.10.2016

Вставьте в начало своего pinkFlower() зажигание светодиода на пине 13.

Если при выборе эффекта он загорится - то ошибки в самой функции, а не в свиче.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

anatonokao пишет:
В таком случае, почему Вы до сих пор продолжаете отвечать в таких вопросах?)

Потому, что, искренне желая Вам помочь, решил дать Вам ссылку на профильный форум. Дал ссылку и пожелал удачи.

Что-то не так?

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

ЕвгенийП пишет:

Что-то не так?

Я же уже отвечал по этому поводу. Повторюсь в третий раз, на форуме гайвера не вышло получить помощи.

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

nik182 пишет:

А где Ваш код?

В первом файле

anatonokao пишет:

и сам код.

#define LED_DI 6
#define BRIGHT 255
#define CUR_LIMIT 2000

#include <FastLED.h>
const int NUM_LEDS = 240;
CRGBPalette16 currentPalette;
CRGB leds[NUM_LEDS];
CRGB color;
unsigned long timing = 0;
unsigned long timing2 = 0;
unsigned long timing3 = 0;
byte thisRow = 0;
byte blackRow = 0;
byte thisRow2 = 0;
byte blackRow2 = 0;
byte thisRow3 = 0;
byte blackRow3 = 0;
byte count = 0;
byte stripBright = 10;

void setup() {
  Serial.begin(9600);
  FastLED.addLeds<WS2812, LED_DI, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  if (CUR_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CUR_LIMIT);
  FastLED.setBrightness(255);
  FastLED.clear();
  currentPalette = CRGB(252, 3, 152);
}

void loop() {
  count += 3;

  if (thisRow <= 16) {                                         //первые три грани
    if (millis() - timing > 40) {
      timing = millis();
      if (thisRow <= 9) {
        firstEdges(ColorFromPalette(currentPalette, 1, stripBright, LINEARBLEND), thisRow);
      }
      if (thisRow >= 3) {
        firstEdges(CRGB(0, 0, 0), blackRow);
        blackRow += 1;
      }
      thisRow += 1;
      stripBright += 2;
    }
  }

  if (thisRow > 10 && thisRow2 <= 16) {                        //вторые шесть граней
    if (millis() - timing2 > 40) {
      timing2 = millis();
      if (thisRow2 <= 9) {
        secondEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow2);
      }
      if (thisRow2 >= 3) {
        secondEdges(CRGB(0, 0, 0), blackRow2);
        blackRow2 += 1;
      }
      thisRow2 += 1;
      stripBright += 3;
    }
  }

  if (thisRow > 10 && thisRow2 > 10 && thisRow3 <= 16) {       //третие три грани
    if (millis() - timing3 > 40) {
      timing3 = millis();
      if (thisRow3 <= 9) {
        thirstEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow3);
      }
      if (thisRow3 >= 3) {
        thirstEdges(CRGB(0, 0, 0), blackRow3);
        blackRow3 += 1;
      }
      thisRow3 += 1;
      stripBright += 5;
    }
  }

  if (thisRow >= 16 && thisRow2 >= 16 && thisRow3 >= 16) {       //обнуление переменных
    timing = 0;
    timing2 = 0;
    timing3 = 0;
    thisRow = 0;
    thisRow2 = 0;
    thisRow3 = 0;
    blackRow = 0;
    blackRow2 = 0;
    blackRow3 = 0;
    stripBright = 10;
    count = 0;
  }
  //delay(200);
  Serial.println(thisRow2);
}

void firstEdges(CRGB colorStrip, byte blackRow) {
  leds[40 + blackRow] = colorStrip;   // передняя левая
  leds[39 - blackRow] = colorStrip;   // передняя правая
  leds[79 - blackRow] = colorStrip;   // нижняя левая   (верхняя)
  leds[80 + blackRow] = colorStrip;   // нижняя левая   (нижняя)
  leds[0 + blackRow] = colorStrip;    // нижняя правая  (верхняя)
  leds[119 - blackRow] = colorStrip;  // нижняя правая  (нижняя)
  FastLED.show();
}

void secondEdges(CRGB colorStrip2, byte blackRow2) {
  leds[179 - blackRow2] = colorStrip2;  // нижняя левая   (верхняя)
  leds[90 + blackRow2] = colorStrip2;   // нижняя левая   (нижняя)
  leds[140 + blackRow2] = colorStrip2;  // нижняя правая  (верхняя)
  leds[109 - blackRow2] = colorStrip2;  // нижняя правая  (нижняя)
  leds[219 - blackRow2] = colorStrip2;  // верхняя левая  (верхняя)
  leds[50 + blackRow2] = colorStrip2;   // верхняя левая  (нижняя)
  leds[220 + blackRow2] = colorStrip2;  // верхняя правая (верхняя)
  leds[29 - blackRow2] = colorStrip2;   // верхняя правая (нижняя)
  leds[69 - blackRow2] = colorStrip2;   // боковая левая  (ближняя)
  leds[180 + blackRow2] = colorStrip2;  // боковая левая  (дальняя)
  leds[10 + blackRow2] = colorStrip2;   // боковая правая (ближняя)
  leds[139 - blackRow2] = colorStrip2;  // боковая правая (дальняя)
  FastLED.show();
}

void thirstEdges(CRGB colorStrip3, byte blackRow3) {
  leds[169 - blackRow3] = colorStrip3;  // задняя левая
  leds[150 + blackRow3] = colorStrip3;  // задняя правая
  leds[209 - blackRow3] = colorStrip3;  // верхняя левая  (верхняя)
  leds[190 + blackRow3] = colorStrip3;  // верхняя левая  (нижняя)
  leds[230 + blackRow3] = colorStrip3;  // верхняя правая (верхняя)
  leds[129 - blackRow3] = colorStrip3;  // верхняя правая (нижняя)
  FastLED.show(); 
}

Далее вставленный во второй файл скопипастнутого кода (строки 342-441)



//------------------------LED EFFECT FUNCTIONS------------------------


void one_color_allHSV(int ahue) {    //-SET ALL LEDS TO ONE COLOR (HSV)
  for (int i = 0 ; i < LED_COUNT; i++ ) {
    leds[i] = CHSV(ahue, thissat, 255);
  }
}

void rainbow_loop() {                        //-m3-LOOP HSV RAINBOW
  idex++;
  ihue = ihue + thisstep;
  if (idex >= LED_COUNT) {
    idex = 0;
  }
  if (ihue > 255) {
    ihue = 0;
  }
  leds[idex] = CHSV(ihue, thissat, 255);
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void color_bounce() {                        //-m5-BOUNCE COLOR (SINGLE LED)
  if (bouncedirection == 0) {
    idex = idex + 1;
    if (idex == LED_COUNT) {
      bouncedirection = 1;
      idex = idex - 1;
    }
  }
  if (bouncedirection == 1) {
    idex = idex - 1;
    if (idex == 0) {
      bouncedirection = 0;
    }
  }
  for (int i = 0; i < LED_COUNT; i++ ) {
    if (i == idex) {
      leds[i] = CHSV(thishue, thissat, 255);
    }
    else {
      leds[i] = CHSV(0, 0, 0);
    }
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}

void color_bounceFADE() {                    //-m6-BOUNCE COLOR (SIMPLE MULTI-LED FADE)
  if (bouncedirection == 0) {
    idex = idex + 1;
    if (idex == LED_COUNT) {
      bouncedirection = 1;
      idex = idex - 1;
    }
  }
  if (bouncedirection == 1) {
    idex = idex - 1;
    if (idex == 0) {
      bouncedirection = 0;
    }
  }
  int iL1 = adjacent_cw(idex);
  int iL2 = adjacent_cw(iL1);
  int iL3 = adjacent_cw(iL2);
  int iR1 = adjacent_ccw(idex);
  int iR2 = adjacent_ccw(iR1);
  int iR3 = adjacent_ccw(iR2);
  for (int i = 0; i < LED_COUNT; i++ ) {
    if (i == idex) {
      leds[i] = CHSV(thishue, thissat, 255);
    }
    else if (i == iL1) {
      leds[i] = CHSV(thishue, thissat, 150);
    }
    else if (i == iL2) {
      leds[i] = CHSV(thishue, thissat, 80);
    }
    else if (i == iL3) {
      leds[i] = CHSV(thishue, thissat, 20);
    }
    else if (i == iR1) {
      leds[i] = CHSV(thishue, thissat, 150);
    }
    else if (i == iR2) {
      leds[i] = CHSV(thishue, thissat, 80);
    }
    else if (i == iR3) {
      leds[i] = CHSV(thishue, thissat, 20);
    }
    else {
      leds[i] = CHSV(0, 0, 0);
    }
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void flicker() {                          //-m9-FLICKER EFFECT
  int random_bright = random(0, 255);
  int random_delay = random(10, 100);
  int random_bool = random(0, random_bright);
  if (random_bool < 10) {
    for (int i = 0 ; i < LED_COUNT; i++ ) {
      leds[i] = CHSV(thishue, thissat, random_bright);
    }
    LEDS.show();
    if (safeDelay(random_delay)) return;
  }
}



void random_red() {                       //QUICK 'N DIRTY RANDOMIZE TO GET CELL AUTOMATA STARTED
  int temprand;
  for (int i = 0; i < LED_COUNT; i++ ) {
    temprand = random(0, 100);
    if (temprand > 50) {
      leds[i].r = 255;
    }
    if (temprand <= 50) {
      leds[i].r = 0;
    }
    leds[i].b = 0; leds[i].g = 0;
  }
  LEDS.show();
}

void rule30() {                          //-m13-1D CELLULAR AUTOMATA - RULE 30 (RED FOR NOW)
  if (bouncedirection == 0) {
    random_red();
    bouncedirection = 1;
  }
  copy_led_array();
  int iCW;
  int iCCW;
  int y = 100;
  for (int i = 0; i < LED_COUNT; i++ ) {
    iCW = adjacent_cw(i);
    iCCW = adjacent_ccw(i);
    if (ledsX[iCCW][0] > y && ledsX[i][0] > y && ledsX[iCW][0] > y) {
      leds[i].r = 0;
    }
    if (ledsX[iCCW][0] > y && ledsX[i][0] > y && ledsX[iCW][0] <= y) {
      leds[i].r = 0;
    }
    if (ledsX[iCCW][0] > y && ledsX[i][0] <= y && ledsX[iCW][0] > y) {
      leds[i].r = 0;
    }
    if (ledsX[iCCW][0] > y && ledsX[i][0] <= y && ledsX[iCW][0] <= y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] > y && ledsX[iCW][0] > y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] > y && ledsX[iCW][0] <= y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] <= y && ledsX[iCW][0] > y) {
      leds[i].r = 255;
    }
    if (ledsX[iCCW][0] <= y && ledsX[i][0] <= y && ledsX[iCW][0] <= y) {
      leds[i].r = 0;
    }
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}

void random_march() {                   //-m14-RANDOM MARCH CCW
  copy_led_array();
  int iCCW;
  leds[0] = CHSV(random(0, 255), 255, 255);
  for (int idex = 1; idex < LED_COUNT ; idex++ ) {
    iCCW = adjacent_ccw(idex);
    leds[idex].r = ledsX[iCCW][0];
    leds[idex].g = ledsX[iCCW][1];
    leds[idex].b = ledsX[iCCW][2];
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void random_color_pop() {                         //-m25-RANDOM COLOR POP
  idex = random(0, LED_COUNT);
  ihue = random(0, 255);
  one_color_all(0, 0, 0);
  leds[idex] = CHSV(ihue, thissat, 255);
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



void kitt() {                                     //-m28-KNIGHT INDUSTIES 2000
  int rand = random(0, TOP_INDEX);
  for (int i = 0; i < rand; i++ ) {
    leds[TOP_INDEX + i] = CHSV(thishue, thissat, 255);
    leds[TOP_INDEX - i] = CHSV(thishue, thissat, 255);
    LEDS.show();
    if (safeDelay(thisdelay / rand)) return;
  }
  for (int i = rand; i > 0; i-- ) {
    leds[TOP_INDEX + i] = CHSV(thishue, thissat, 0);
    leds[TOP_INDEX - i] = CHSV(thishue, thissat, 0);
    LEDS.show();
    if (safeDelay(thisdelay / rand)) return;
  }
}

void matrix() {                                   //-m29-ONE LINE MATRIX
  int rand = random(0, 100);
  if (rand > 90) {
    leds[0] = CHSV(thishue, thissat, 255);
  }
  else {
    leds[0] = CHSV(thishue, thissat, 0);
  }
  copy_led_array();
  for (int i = 1; i < LED_COUNT; i++ ) {
    leds[i].r = ledsX[i - 1][0];
    leds[i].g = ledsX[i - 1][1];
    leds[i].b = ledsX[i - 1][2];
  }
  LEDS.show();
  if (safeDelay(thisdelay)) return;
}



//-----------------------------------бегающие светодиоды-----------------------------------
void CylonBounce(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {

  for (int i = 0; i < LED_COUNT - EyeSize - 2; i++) {
    setAll(0, 0, 0);
    setPixel(i, red / 10, green / 10, blue / 10);
    for (int j = 1; j <= EyeSize; j++) {
      setPixel(i + j, red, green, blue);
    }
    setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
    FastLED.show();
    if (safeDelay(SpeedDelay)) return;
  }

  if (safeDelay(ReturnDelay)) return;

  for (int i = LED_COUNT - EyeSize - 2; i > 0; i--) {
    setAll(0, 0, 0);
    setPixel(i, red / 10, green / 10, blue / 10);
    for (int j = 1; j <= EyeSize; j++) {
      setPixel(i + j, red, green, blue);
    }
    setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
    FastLED.show();
    if (safeDelay(SpeedDelay)) return;
  }

  if (safeDelay(ReturnDelay)) return;
}


//-------------------------------newKITT---------------------------------------
void rainbowCycle(int SpeedDelay) {
  byte *c;
  uint16_t i, j;

  for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < LED_COUNT; i++) {
      c = Wheel(((i * 256 / LED_COUNT) + j) & 255);
      setPixel(i, *c, *(c + 1), *(c + 2));
    }
    FastLED.show();
    if (safeDelay(SpeedDelay)) return;
  }
}

byte * Wheel(byte WheelPos) {
  static byte c[3];

  if (WheelPos < 85) {
    c[0] = WheelPos * 3;
    c[1] = 255 - WheelPos * 3;
    c[2] = 0;
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    c[0] = 255 - WheelPos * 3;
    c[1] = 0;
    c[2] = WheelPos * 3;
  } else {
    WheelPos -= 170;
    c[0] = 0;
    c[1] = WheelPos * 3;
    c[2] = 255 - WheelPos * 3;
  }

  return c;
}


//-------------------------------SnowSparkle---------------------------------------
void SnowSparkle(byte red, byte green, byte blue, int SparkleDelay, int SpeedDelay) {
  setAll(red, green, blue);

  int Pixel = random(LED_COUNT);
  setPixel(Pixel, 0xff, 0xff, 0xff);
  FastLED.show();
  if (safeDelay(SparkleDelay)) return;
  setPixel(Pixel, red, green, blue);
  FastLED.show();
  if (safeDelay(SpeedDelay)) return;
}



//-------------------------------theaterChaseRainbow---------------------------------------
void theaterChaseRainbow(int SpeedDelay) {
  byte *c;

  for (int j = 0; j < 256; j++) {   // cycle all 256 colors in the wheel
    for (int q = 0; q < 3; q++) {
      for (int i = 0; i < LED_COUNT; i = i + 3) {
        c = Wheel( (i + j) % 255);
        setPixel(i + q, *c, *(c + 1), *(c + 2)); //turn every third pixel on
      }
      FastLED.show();
      if (safeDelay(SpeedDelay)) return;
      for (int i = 0; i < LED_COUNT; i = i + 3) {
        setPixel(i + q, 0, 0, 0);    //turn every third pixel off
      }
    }
  }
}


//------------------------------------PinkFlower--------------------------------------------
void pinkFlower() {
  count += 3;

  if (thisRow <= 16) {                                         //первые три грани
    if (millis() - timing > 40) {
      timing = millis();
      if (thisRow <= 9) {
        firstEdges(ColorFromPalette(currentPalette, 1, stripBright, LINEARBLEND), thisRow);
      }
      if (thisRow >= 3) {
        firstEdges(CRGB(0, 0, 0), blackRow);
        blackRow += 1;
      }
      thisRow += 1;
      stripBright += 2;
    }
  }

  if (thisRow > 10 && thisRow2 <= 16) {                        //вторые шесть граней
    if (millis() - timing2 > 40) {
      timing2 = millis();
      if (thisRow2 <= 9) {
        secondEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow2);
      }
      if (thisRow2 >= 3) {
        secondEdges(CRGB(0, 0, 0), blackRow2);
        blackRow2 += 1;
      }
      thisRow2 += 1;
      stripBright += 3;
    }
  }

  if (thisRow > 10 && thisRow2 > 10 && thisRow3 <= 16) {       //третие три грани
    if (millis() - timing3 > 40) {
      timing3 = millis();
      if (thisRow3 <= 9) {
        thirstEdges(ColorFromPalette(currentPalette, count, stripBright, LINEARBLEND), thisRow3);
      }
      if (thisRow3 >= 3) {
        thirstEdges(CRGB(0, 0, 0), blackRow3);
        blackRow3 += 1;
      }
      thisRow3 += 1;
      stripBright += 5;
    }
  }

  if (thisRow >= 16 && thisRow2 >= 16 && thisRow3 >= 16) {       //обнуление переменных
    timing = 0;
    timing2 = 0;
    timing3 = 0;
    thisRow = 0;
    thisRow2 = 0;
    thisRow3 = 0;
    blackRow = 0;
    blackRow2 = 0;
    blackRow3 = 0;
    stripBright = 10;
    count = 0;
  }
  if (safeDelay(thisdelay)) return;
}

void firstEdges(CRGB colorStrip, byte blackRow) {
  leds[40 + blackRow] = colorStrip;   // передняя левая
  leds[39 - blackRow] = colorStrip;   // передняя правая
  leds[79 - blackRow] = colorStrip;   // нижняя левая   (верхняя)
  leds[80 + blackRow] = colorStrip;   // нижняя левая   (нижняя)
  leds[0 + blackRow] = colorStrip;    // нижняя правая  (верхняя)
  leds[119 - blackRow] = colorStrip;  // нижняя правая  (нижняя)
  FastLED.show();
}

void secondEdges(CRGB colorStrip2, byte blackRow2) {
  leds[179 - blackRow2] = colorStrip2;  // нижняя левая   (верхняя)
  leds[90 + blackRow2] = colorStrip2;   // нижняя левая   (нижняя)
  leds[140 + blackRow2] = colorStrip2;  // нижняя правая  (верхняя)
  leds[109 - blackRow2] = colorStrip2;  // нижняя правая  (нижняя)
  leds[219 - blackRow2] = colorStrip2;  // верхняя левая  (верхняя)
  leds[50 + blackRow2] = colorStrip2;   // верхняя левая  (нижняя)
  leds[220 + blackRow2] = colorStrip2;  // верхняя правая (верхняя)
  leds[29 - blackRow2] = colorStrip2;   // верхняя правая (нижняя)
  leds[69 - blackRow2] = colorStrip2;   // боковая левая  (ближняя)
  leds[180 + blackRow2] = colorStrip2;  // боковая левая  (дальняя)
  leds[10 + blackRow2] = colorStrip2;   // боковая правая (ближняя)
  leds[139 - blackRow2] = colorStrip2;  // боковая правая (дальняя)
  FastLED.show();
}

void thirstEdges(CRGB colorStrip3, byte blackRow3) {
  leds[169 - blackRow3] = colorStrip3;  // задняя левая
  leds[150 + blackRow3] = colorStrip3;  // задняя правая
  leds[209 - blackRow3] = colorStrip3;  // верхняя левая  (верхняя)
  leds[190 + blackRow3] = colorStrip3;  // верхняя левая  (нижняя)
  leds[230 + blackRow3] = colorStrip3;  // верхняя правая (верхняя)
  leds[129 - blackRow3] = colorStrip3;  // верхняя правая (нижняя)
  FastLED.show();
}


boolean safeDelay(int delTime) {
  uint32_t thisTime = millis();
  while (millis() - thisTime <= delTime) {
    if (changeFlag) {
      changeFlag = false;
      return true;
    }
  }
  return false;
}

и прописанный в кейс в первый файл (скопипастнутого) (124 строка)


#include "FastLED.h"          // библиотека для работы с лентой

#define LED_COUNT 40          // число светодиодов в кольце/ленте
#define LED_DT 6             // пин, куда подключен DIN ленты

int max_bright = 255;          // максимальная яркость (0 - 255)
boolean adapt_light = 1;       // адаптивная подсветка (1 - включить, 0 - выключить)

byte fav_modes[] = {2, 11, 14, 25, 27, 30, 41};  // список "любимых" режимов
byte num_modes = sizeof(fav_modes);         // получить количество "любимых" режимов (они все по 1 байту..)
unsigned long change_time, last_change, last_bright;
int new_bright;

volatile byte ledMode = 3;
/*
  Стартовый режим
  0 - все выключены
  1 - все включены
  3 - кольцевая радуга
  888 - демо-режим
*/

// цвета мячиков для режима
byte ballColors[3][3] = {
  {0xff, 0, 0},
  {0xff, 0xff, 0xff},
  {0   , 0   , 0xff}
};

// ---------------СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ-----------------
int BOTTOM_INDEX = 0;        // светодиод начала отсчёта
int TOP_INDEX = int(LED_COUNT / 2);
int EVENODD = LED_COUNT % 2;
struct CRGB leds[LED_COUNT];
int ledsX[LED_COUNT][3];     //-ARRAY FOR COPYING WHATS IN THE LED STRIP CURRENTLY (FOR CELL-AUTOMATA, MARCH, ETC)

int thisdelay = 20;          //-FX LOOPS DELAY VAR
int thisstep = 10;           //-FX LOOPS DELAY VAR
int thishue = 0;             //-FX LOOPS DELAY VAR
int thissat = 255;           //-FX LOOPS DELAY VAR

int thisindex = 0;
int thisRED = 0;
int thisGRN = 0;
int thisBLU = 0;

const int NUM_LEDS = 240;
CRGBPalette16 currentPalette;
unsigned long timing = 0;
unsigned long timing2 = 0;
unsigned long timing3 = 0;
byte thisRow = 0;
byte blackRow = 0;
byte thisRow2 = 0;
byte blackRow2 = 0;
byte thisRow3 = 0;
byte blackRow3 = 0;
byte count = 0;
byte stripBright = 10;

int idex = 0;                //-LED INDEX (0 to LED_COUNT-1
int ihue = 0;                //-HUE (0-255)
int ibright = 0;             //-BRIGHTNESS (0-255)
int isat = 0;                //-SATURATION (0-255)
int bouncedirection = 0;     //-SWITCH FOR COLOR BOUNCE (0-1)
float tcount = 0.0;          //-INC VAR FOR SIN LOOPS
int lcount = 0;              //-ANOTHER COUNTING VAR

volatile uint32_t btnTimer;
volatile byte modeCounter;
volatile boolean changeFlag;
// ---------------СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ-----------------


void setup()
{
  Serial.begin(9600);              // открыть порт для связи
  LEDS.setBrightness(max_bright);  // ограничить максимальную яркость

  LEDS.addLeds<WS2811, LED_DT, GRB>(leds, LED_COUNT);  // настрйоки для нашей ленты (ленты на WS2811, WS2812, WS2812B)
  one_color_all(0, 0, 0);          // погасить все светодиоды
  LEDS.show();                     // отослать команду

  randomSeed(analogRead(0));
  pinMode(2, INPUT_PULLUP);
  pinMode(A3, INPUT);     // к входу A3 подключаем потенциометр
  attachInterrupt(0, btnISR, FALLING);
}

void one_color_all(int cred, int cgrn, int cblu) {       //-SET ALL LEDS TO ONE COLOR
  for (int i = 0 ; i < LED_COUNT; i++ ) {
    leds[i].setRGB( cred, cgrn, cblu);
  }
}

void loop() {
  if (adapt_light) {                        // если включена адаптивная яркость
    if (millis() - last_bright > 5) {     // каждые полсекунды
      last_bright = millis();               // сброить таймер
      int val = analogRead(A3); // считываем данные с порта A1
      val = val / 4;                      // делим значения на 4
      new_bright = val;
      LEDS.setBrightness(new_bright);        // установить новую яркость
    }
  }


  if (Serial.available() > 0) { // если что то прислали
    int slk = Serial.parseInt(); // парсим в тип данных int
    if (slk != 0) {
      ledMode = slk;
      Serial.println(ledMode);
      change_mode(ledMode); // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
    }
  }

  switch (ledMode) {
    case 999: break;                           // пазуа
    // case  2: rainbow_fade(); break;              // Радуга */
    case  3: rainbow_loop(); break;            // крутящаяся радуга +
    /*  case  4: random_burst(); break;            // случайная смена цветов */
    case  5: color_bounce(); break;            // бегающий светодиод +
    case  6: color_bounceFADE(); break;        // бегающий паровозик светодиодов +
    case  7: pinkFlower(); break;           // pinkFlower
    //  case  8: ems_lightsALL(); break;           // вращается половина красных и половина синих */
    case  9: flicker(); break;                 // случайный стробоскоп +
    /* case 10: pulse_one_color_all(); break;     // пульсация одним цветом
       case 11: pulse_one_color_all_rev(); break; // пульсация со сменой цветов
       case 12: fade_vertical(); break;           // плавная смена яркости по вертикали (для кольца) */
    case 13: rule30(); break;                  // безумие красных светодиодов +
    case 14: random_march(); break;            // безумие случайных цветов +
    /* case 15: rwb_march(); break;               // белый синий красный бегут по кругу (ПАТРИОТИЗМ!)
       case 16: radiation(); break;               // пульсирует значок радиации
       case 17: color_loop_vardelay(); break;     // красный светодиод бегает по кругу
           case 18: white_temps(); break;             // бело синий градиент (?)
           case 19: sin_bright_wave(); break;         // тоже хрень какая то
           case 20: pop_horizontal(); break;          // красные вспышки спускаются вниз
           case 21: quad_bright_curve(); break;       // полумесяц
           case 22: flame(); break;                   // эффект пламени
           case 23: rainbow_vertical(); break;        // радуга в вертикаьной плоскости (кольцо)
           case 24: pacman(); break;                  // пакман */
    case 25: random_color_pop(); break;        // безумие случайных вспышек +
    /*  case 26: ems_lightsSTROBE(); break;        // полицейская мигалка
        case 27: rgb_propeller(); break;           // RGB пропеллер */
    case 28: kitt(); break;                    // случайные вспышки красного в вертикаьной плоскости +
    case 29: matrix(); break;                  // зелёненькие бегают по кругу случайно +
    /*    case 30: new_rainbow_loop(); break;        // крутая плавная вращающаяся радуга
        case 31: strip_march_ccw(); break;         // чёт сломалось
        case 32: strip_march_cw(); break;          // чёт сломалось
        case 33: colorWipe(0x00, 0xff, 0x00, thisdelay);
          colorWipe(0x00, 0x00, 0x00, thisdelay); break;                                // плавное заполнение цветом */
    case 34: CylonBounce(0xff, 0, 0, 4, 10, thisdelay); break;                      // бегающие светодиоды +
    /*    case 35: Fire(55, 120, thisdelay); break;                                       // линейный огонь
        case 36: NewKITT(0xff, 0, 0, 8, 10, thisdelay); break;                          // беготня секторов круга (не работает) */
    case 37: rainbowCycle(thisdelay); break;                                        // очень плавная вращающаяся радуга +
    /*    case 38: TwinkleRandom(20, thisdelay, 1); break;                                // случайные разноцветные включения (1 - танцуют все, 0 - случайный 1 диод)
        case 39: RunningLights(0xff, 0xff, 0x00, thisdelay); break;                     // бегущие огни
        case 40: Sparkle(0xff, 0xff, 0xff, thisdelay); break;                           // случайные вспышки белого цвета */
    case 41: SnowSparkle(0x10, 0x10, 0x10, thisdelay, random(100, 1000)); break;    // случайные вспышки белого цвета на белом фоне +
    /*    case 42: theaterChase(0xff, 0, 0, thisdelay); break;                            // бегущие каждые 3 (ЧИСЛО СВЕТОДИОДОВ ДОЛЖНО БЫТЬ КРАТНО 3) */
    case 43: theaterChaseRainbow(thisdelay); break;                                 // бегущие каждые 3 радуга (ЧИСЛО СВЕТОДИОДОВ ДОЛЖНО БЫТЬ КРАТНО 3) +
      /*    case 44: Strobe(0xff, 0xff, 0xff, 10, thisdelay, 1000); break;                  // стробоскоп

          case 45: BouncingBalls(0xff, 0, 0, 3); break;                                   // прыгающие мячики
          case 46: BouncingColoredBalls(3, ballColors); break;                            // прыгающие мячики цветные

          case 888: demo_modeA(); break;             // длинное демо
          case 889: demo_modeB(); break;             // короткое демо */
  }
}

void btnISR() {
  if (millis() - btnTimer > 500) {
    btnTimer = millis();  // защита от дребезга
    if (++modeCounter >= num_modes) modeCounter = 0;
    ledMode = fav_modes[modeCounter];    // получаем новый номер следующего режима
    change_mode(ledMode);               // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
    changeFlag = true;
  }
}

void change_mode(int newmode) {
  thissat = 255;
  switch (newmode) {
    case 0: one_color_all(0, 0, 0); LEDS.show(); break; //---ALL OFF
    case 1: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL ON
    case 2: thisdelay = 60; break;                      //---STRIP RAINBOW FADE
    case 3: thisdelay = 20; thisstep = 10; break;       //---RAINBOW LOOP
    case 4: thisdelay = 20; break;                      //---RANDOM BURST
    case 5: thisdelay = 20; thishue = 0; break;         //---CYLON v1
    case 6: thisdelay = 80; thishue = 0; break;         //---CYLON v2
    case 7: thisdelay = 40; thishue = 0; break;         //---POLICE LIGHTS SINGLE
    case 8: thisdelay = 40; thishue = 0; break;         //---POLICE LIGHTS SOLID
    case 9: thishue = 160; thissat = 50; break;         //---STRIP FLICKER
    case 10: thisdelay = 15; thishue = 0; break;        //---PULSE COLOR BRIGHTNESS
    case 11: thisdelay = 30; thishue = 0; break;        //---PULSE COLOR SATURATION
    case 12: thisdelay = 60; thishue = 180; break;      //---VERTICAL SOMETHING
    case 13: thisdelay = 100; break;                    //---CELL AUTO - RULE 30 (RED)
    case 14: thisdelay = 80; break;                     //---MARCH RANDOM COLORS
    case 15: thisdelay = 80; break;                     //---MARCH RWB COLORS
    case 16: thisdelay = 60; thishue = 95; break;       //---RADIATION SYMBOL
    //---PLACEHOLDER FOR COLOR LOOP VAR DELAY VARS
    case 19: thisdelay = 35; thishue = 180; break;      //---SIN WAVE BRIGHTNESS
    case 20: thisdelay = 100; thishue = 0; break;       //---POP LEFT/RIGHT
    case 21: thisdelay = 100; thishue = 180; break;     //---QUADRATIC BRIGHTNESS CURVE
    //---PLACEHOLDER FOR FLAME VARS
    case 23: thisdelay = 50; thisstep = 15; break;      //---VERITCAL RAINBOW
    case 24: thisdelay = 50; break;                     //---PACMAN
    case 25: thisdelay = 35; break;                     //---RANDOM COLOR POP
    case 26: thisdelay = 25; thishue = 0; break;        //---EMERGECNY STROBE
    case 27: thisdelay = 100; thishue = 0; break;        //---RGB PROPELLER
    case 28: thisdelay = 100; thishue = 0; break;       //---KITT
    case 29: thisdelay = 100; thishue = 95; break;       //---MATRIX RAIN
    case 30: thisdelay = 15; break;                      //---NEW RAINBOW LOOP
    case 31: thisdelay = 100; break;                    //---MARCH STRIP NOW CCW
    case 32: thisdelay = 100; break;                    //---MARCH STRIP NOW CCW
    case 33: thisdelay = 50; break;                     // colorWipe
    case 34: thisdelay = 50; break;                     // CylonBounce
    case 35: thisdelay = 15; break;                     // Fire
    case 36: thisdelay = 50; break;                     // NewKITT
    case 37: thisdelay = 20; break;                     // rainbowCycle
    case 38: thisdelay = 10; break;                     // rainbowTwinkle
    case 39: thisdelay = 50; break;                     // RunningLights
    case 40: thisdelay = 0; break;                      // Sparkle
    case 41: thisdelay = 30; break;                     // SnowSparkle
    case 42: thisdelay = 50; break;                     // theaterChase
    case 43: thisdelay = 50; break;                     // theaterChaseRainbow
    case 44: thisdelay = 100; break;                    // Strobe

    case 101: one_color_all(255, 0, 0); LEDS.show(); break; //---ALL RED
    case 102: one_color_all(0, 255, 0); LEDS.show(); break; //---ALL GREEN
    case 103: one_color_all(0, 0, 255); LEDS.show(); break; //---ALL BLUE
    case 104: one_color_all(255, 255, 0); LEDS.show(); break; //---ALL COLOR X
    case 105: one_color_all(0, 255, 255); LEDS.show(); break; //---ALL COLOR Y
    case 106: one_color_all(255, 0, 255); LEDS.show(); break; //---ALL COLOR Z
  }
  bouncedirection = 0;
  one_color_all(0, 0, 0);
  ledMode = newmode;
}

 

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

sadman41 пишет:
Вставьте в начало своего pinkFlower() зажигание светодиода на пине 13.

Большое спасибо за первый дельный совет, sadman41. Я попробую.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

anatonokao пишет:

ЕвгенийП пишет:

Что-то не так?

Я же уже отвечал по этому поводу. Повторюсь в третий раз, на форуме гайвера не вышло получить помощи.

Вы отвечали ПОСЛЕ моего ответа в посте #1. Так что, простите, я не умею предугадывать что мне скажут в будущем и Ваших претензий ко мне совершенно не понимаю.

b707
Offline
Зарегистрирован: 26.05.2017

anatonokao пишет:

Повторюсь в третий раз, на форуме гайвера не вышло получить помощи.

и что дальше-то? Из этого разве следует, что нужно спрашивать тут?

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

Никаких претензий у меня к Вам нету. И я ничего не говорю про Ваш первый ответ. Я говорю о том, что не понимаю, почему после того как я написал

anatonokao пишет:
На форуме гайвера помощь получить несколько проблематично.
в посте #10.

Вы снова говорите мне, в следующем же комментарии #11

ЕвгенийП пишет:
И чего к автору не идут?

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

b707, сначала Вы назвали меня занудой, теперь задаёте не совсем понятные вопросы. Какого ответа Вы от меня ждёте?

b707
Offline
Зарегистрирован: 26.05.2017

anatonokao пишет:

b707, сначала Вы назвали меня занудой, теперь задаёте не совсем понятные вопросы. Какого ответа Вы от меня ждёте?

честно? - чтоб вы свалили к гайверу :)

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

b707, заметьте, я не спрашивал каких действий, я спрашивал какого ответа)

А так, удачи Вам дождаться)

b707
Offline
Зарегистрирован: 26.05.2017

anatonokao пишет:

b707, заметьте, я не спрашивал каких действий, я спрашивал какого ответа)

подловили :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

anatonokao пишет:
Я говорю о том, что не понимаю, почему после того как я написал

anatonokao пишет:
На форуме гайвера помощь получить несколько проблематично.
в посте #10.

Вы снова говорите мне, в следующем же комментарии #11

ЕвгенийП пишет:
И чего к автору не идут?

Это было сказано в общем, обо всех кто приходит сюда с чужими кодами.

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

Что теперь делать? Отвечу. Не берите у этого автора. Пишите сами. Свой собственный код. Не будет получаться - поможем.

anatonokao
anatonokao аватар
Offline
Зарегистрирован: 23.08.2021

ЕвгенийП пишет:

Это было сказано в общем, обо всех кто приходит сюда с чужими кодами.

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

Что теперь делать? Отвечу. Не берите у этого автора. Пишите сами. Свой собственный код. Не будет получаться - поможем.

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

Простите за некропост.