Помогите найти ошибку

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Ок. Надо локализовать где ерунда. Расскажи как понял, что именно после такой то строки идет все на начало ? Ставил промежуточный вывод в мониьтор?
 

Andrei528

✩✩✩✩✩✩✩
12 Сен 2020
19
0
Во всех местах исправил?
Да. Даже random(0-NUM_LEDS) исправил на random8(NUM_LEDS)

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

Бинго!

Короче, господа, всем помогавшим и сочувствовавшим огромное спасибо! Заменил millis() на micros(), с умножением на 1000 соответствующих параметров, и все заработало как надо.
Но почему?!

Ок. Надо локализовать где ерунда. Расскажи как понял, что именно после такой то строки идет все на начало ? Ставил промежуточный вывод в мониьтор?
Гирлянда передо мной на столе лежит
 

Roden

✩✩✩✩✩✩✩
19 Апр 2019
31
5
Может быть в твоей ардуинке брак? По коду который ты предоставил всё должно работать точно так-же как и с micros и умноженными задержками.
 

Andrei528

✩✩✩✩✩✩✩
12 Сен 2020
19
0
Вот это не понятно... а МК какой ?
А версия arduino IDE ?
Ардуино Микро
1.8.13

Может быть в твоей ардуинке брак? По коду который ты предоставил всё должно работать точно так-же как и с micros и умноженными задержками.
Не знаю. А как я могу определить брак?
 

Andrei528

✩✩✩✩✩✩✩
12 Сен 2020
19
0
Может быть в твоей ардуинке брак? По коду который ты предоставил всё должно работать точно так-же как и с micros и умноженными задержками.
По идее, оно и работает (но не все). В самом начальном цикле с таймером (где все цвета случайны без разбору) я millis() оставил, этот цикл почему-то не заклинивал программу.

Покажи окончательную версию скетча
C++:
/ FastLED
// куча эффектов для елки нон-стоп по кругу
#define NUM_LEDS 50
#include "FastLED.h"
#define PIN 6
CRGB leds[NUM_LEDS];
byte counter;
void setup() {
  //Serial.begin(57600);
  FastLED.addLeds<WS2811, PIN, RGB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(200);
  pinMode(13, OUTPUT);
}
void fadeall()
{
  for (int i = 0; i < NUM_LEDS; i++)
  {
    leds[i].nscale8(250);
  }
}

void loop()
{
  // эффект Cylon
  static uint8_t hue = 0;
  //  Serial.print("x");
  // First slide the led in one direction
  for (int i = 0; i < NUM_LEDS; i++) {
    // Set the i'th led to red
    leds[i] = CHSV(hue++, 255, 255);
    // Show the leds
    FastLED.show();
    // now that we've shown the leds, reset the i'th led to black
    // leds[i] = CRGB::Black;
    fadeall();
    // Wait a little bit before we loop around and do it again
    delay(50);
  }
  //   Serial.print("x");
  // Now go in the other direction.
  for (int i = (NUM_LEDS) - 1; i >= 0; i--) {
    // Set the i'th led to red
    leds[i] = CHSV(hue++, 255, 255);
    // Show the leds
    FastLED.show();
    // now that we've shown the leds, reset the i'th led to black
    // leds[i] = CRGB::Black;
    fadeall();
    // Wait a little bit before we loop around and do it again
    delay(50);
  }
  fill_solid( leds, NUM_LEDS, CRGB::Black);

  {
    // случайное включение и гашение LED
    uint32_t x = millis();
    while (millis () - x < 15000)
    {
      leds [random8 ( NUM_LEDS)] = CRGB(random8( ), random8(), random8()); // полностью случайные цвета
      leds [random8( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
      FastLED.show();
      delay( 50 );
    }
  }
  {
    // переливы цвета
    int dk = 0;
    int dl = 1000;
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(255 - i, 0, i)); // красный - синий
      FastLED.show();
      delay (dk);
    }
    delay (dl);

    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(0, i, 255 - i)); // синий - зеленый
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(0, 255 , i)); // зеленый - голубой
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(i, 255 - i, 255)); // голубой - фиолетовый
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(255, i, 255 - i)); // фиолетовый - желтый
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(255, 255 - i, 0)); // желтый - красный
      FastLED.show();
      delay (dk);
    }
    delay (dl);
  }

  //   случайные оттенки красного
  // если раскомментирован этот цикл, то после прохождения одного цикла вместо пяти в пределах
  // строк скетча №№ 187 - 240 происходит возврат в начало всего скетча
  uint32_t z = micros();
  while (micros () - z < 10000000)
  {
    leds [random8 ( NUM_LEDS)] = CRGB( 255, random(0 ,  75), random(0 , 75));
    leds [random8 ( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
    FastLED.show();
    delay( 2 );
  }

  {
    // сплошное заполнение цветом
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 0, 255, 0);
      FastLED.show();
      delay (50);
    }
  }

  // случайные оттенки зеленого
  // если раскомментирован этот цикл, то после прохождения одного цикла вместо пяти в пределах
  // строк скетча №№ 187 - 240 происходит возврат в начало всего скетча
  uint32_t x = micros();
  while (micros () - x  < 10000000)
  {
    leds [random8 ( NUM_LEDS)] = CRGB(random(0, 75), 255, random(0 , 75));
    leds [random8 ( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
    FastLED.show();
    delay( 30 );
  }

  {
    for (int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 0, 255, 255);
      FastLED.show();
      delay (50);
    }
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 255, 0, 0);
      FastLED.show();
      delay (50);
    }
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 0, 0, 255);
      FastLED.show();
      delay (50);
    }
  }
  {
    //     случайные оттенки синего
    //       если раскомментирован этот цикл, то после прохождения одного цикла вместо пяти в пределах
    //       строк скетча №№ 187 - 240 происходит возврат в начало всего скетча
    uint32_t kk = micros();
    while ( micros () - kk < 20000000)
    {
      leds [random8 ( NUM_LEDS)] = CRGB(random(0 , 100), random(0 , 100), 255);
      leds [random8 ( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
      FastLED.show();
      delay( 5 );
    }
  }
  {
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 255, 255, 0);
      FastLED.show();
      delay (50);
    }
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 255, 0, 255);
      FastLED.show();
      delay (50);
    }
  }

  // бегущие тройки разных цветов
  {
    int p = 0;
    int q = 0;
    int r = 0;
    int s = 0;

    do
    {
      for (int i = 0; i <= NUM_LEDS + 2; i ++ )
      {
        q = i - 1;
        r = i - 2;
        p = i - 3;
        if (s < 1)
        {
          leds[i] =  CRGB( 0, 255, 0);
          leds[q] =  CRGB( 0, 255, 0);
          leds[r] =  CRGB( 0, 255, 0);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else if (s < 2)
        {
          leds[i] =  CRGB( 0, 0, 255);
          leds[q] =  CRGB( 0, 0, 255);
          leds[r] =  CRGB( 0, 0, 255);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else if (s < 3)
        {
          leds[i] =  CRGB( 255, 255, 0);
          leds[q] =  CRGB( 255, 255, 0);
          leds[r] =  CRGB( 255, 255, 0);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else if (s < 4)
        {
          leds[i] =  CRGB( 255, 0, 255);
          leds[q] =  CRGB( 255, 0, 255);
          leds[r] =  CRGB( 255, 0, 255);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else
        {
          leds[i] =  CRGB( 255, 0, 0);
          leds[q] =  CRGB( 255, 0, 0);
          leds[r] =  CRGB( 255, 0, 0);
          leds [p] = CRGB ( 0, 0, 0);
        }
        FastLED.show();
        delay( 50 );
      }
      s++;
    }
    while (s <  5);
  }

  {
    int y = 0;
    do
    {
      // две бегущие навстречу тройки
      int j = 0;
      for (int i = 0; i <= NUM_LEDS; i ++ )
      {
        j = NUM_LEDS - i;
        leds[i + 2] =  CRGB( 255, 255, 255);
        leds[i + 1 ] =  CRGB( 0, 255, 0);
        leds[i] =  CRGB( 255, 0, 0);
        leds[i - 1] =  CRGB( 0, 0, 0);
        leds[j - 3] = CRGB( 255, 0, 255);
        leds[j - 2] = CRGB( 255, 255, 0);
        leds[j - 1] = CRGB( 0, 0, 255);
        leds[j ] = CRGB( 0, 0, 0);

        FastLED.show();
        delay(100 );
      }
      y++;
    }
    while ( y <  5);
  }
  {
    int  k = 0;
    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 255, 0, 0); // красный
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int  k = 0;
    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int  k = 0;
    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 0, 255, 0); // зеленый
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int  k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int  k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 0, 0, 255); // синий
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int  k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 0, 255, 255); // голубой
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int  k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 255, 0, 255); // фиолетовый
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }

  {
    int k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 255, 255, 0); //желтый
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }

}
C++:
/ FastLED
// куча эффектов для елки нон-стоп по кругу
#define NUM_LEDS 50
#include "FastLED.h"
#define PIN 6
CRGB leds[NUM_LEDS];
byte counter;
void setup() {
  //Serial.begin(57600);
  FastLED.addLeds<WS2811, PIN, RGB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(200);
  pinMode(13, OUTPUT);
}
void fadeall()
{
  for (int i = 0; i < NUM_LEDS; i++)
  {
    leds[i].nscale8(250);
  }
}

void loop()
{
  // эффект Cylon
  static uint8_t hue = 0;
  //  Serial.print("x");
  // First slide the led in one direction
  for (int i = 0; i < NUM_LEDS; i++) {
    // Set the i'th led to red
    leds[i] = CHSV(hue++, 255, 255);
    // Show the leds
    FastLED.show();
    // now that we've shown the leds, reset the i'th led to black
    // leds[i] = CRGB::Black;
    fadeall();
    // Wait a little bit before we loop around and do it again
    delay(50);
  }
  //   Serial.print("x");
  // Now go in the other direction.
  for (int i = (NUM_LEDS) - 1; i >= 0; i--) {
    // Set the i'th led to red
    leds[i] = CHSV(hue++, 255, 255);
    // Show the leds
    FastLED.show();
    // now that we've shown the leds, reset the i'th led to black
    // leds[i] = CRGB::Black;
    fadeall();
    // Wait a little bit before we loop around and do it again
    delay(50);
  }
  fill_solid( leds, NUM_LEDS, CRGB::Black);

  {
    // случайное включение и гашение LED
    uint32_t x = millis();
    while (millis () - x < 15000)
    {
      leds [random8 ( NUM_LEDS)] = CRGB(random8( ), random8(), random8()); // полностью случайные цвета
      leds [random8( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
      FastLED.show();
      delay( 50 );
    }
  }
  {
    // переливы цвета
    int dk = 0;
    int dl = 1000;
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(255 - i, 0, i)); // красный - синий
      FastLED.show();
      delay (dk);
    }
    delay (dl);

    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(0, i, 255 - i)); // синий - зеленый
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(0, 255 , i)); // зеленый - голубой
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(i, 255 - i, 255)); // голубой - фиолетовый
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(255, i, 255 - i)); // фиолетовый - желтый
      FastLED.show();
      delay (dk);
    }
    delay (dl);
    for ( int i = 0; i <= 255; i ++ )
    {
      fill_solid( leds, NUM_LEDS, CRGB(255, 255 - i, 0)); // желтый - красный
      FastLED.show();
      delay (dk);
    }
    delay (dl);
  }

  //   случайные оттенки красного
  // если раскомментирован этот цикл, то после прохождения одного цикла вместо пяти в пределах
  // строк скетча №№ 187 - 240 происходит возврат в начало всего скетча
  uint32_t z = micros();
  while (micros () - z < 10000000)
  {
    leds [random8 ( NUM_LEDS)] = CRGB( 255, random(0 ,  75), random(0 , 75));
    leds [random8 ( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
    FastLED.show();
    delay( 2 );
  }

  {
    // сплошное заполнение цветом
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 0, 255, 0);
      FastLED.show();
      delay (50);
    }
  }

  // случайные оттенки зеленого
  // если раскомментирован этот цикл, то после прохождения одного цикла вместо пяти в пределах
  // строк скетча №№ 187 - 240 происходит возврат в начало всего скетча
  uint32_t x = micros();
  while (micros () - x  < 10000000)
  {
    leds [random8 ( NUM_LEDS)] = CRGB(random(0, 75), 255, random(0 , 75));
    leds [random8 ( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
    FastLED.show();
    delay( 30 );
  }

  {
    for (int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 0, 255, 255);
      FastLED.show();
      delay (50);
    }
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 255, 0, 0);
      FastLED.show();
      delay (50);
    }
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 0, 0, 255);
      FastLED.show();
      delay (50);
    }
  }
  {
    //     случайные оттенки синего
    //       если раскомментирован этот цикл, то после прохождения одного цикла вместо пяти в пределах
    //       строк скетча №№ 187 - 240 происходит возврат в начало всего скетча
    uint32_t kk = micros();
    while ( micros () - kk < 20000000)
    {
      leds [random8 ( NUM_LEDS)] = CRGB(random(0 , 100), random(0 , 100), 255);
      leds [random8 ( NUM_LEDS)] = CRGB(0, 0, 0); // случайное гашение
      FastLED.show();
      delay( 5 );
    }
  }
  {
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 255, 255, 0);
      FastLED.show();
      delay (50);
    }
    for ( int i = 0; i < NUM_LEDS; i ++ )
    {
      leds[i] =  CRGB( 255, 0, 255);
      FastLED.show();
      delay (50);
    }
  }

  // бегущие тройки разных цветов
  {
    int p = 0;
    int q = 0;
    int r = 0;
    int s = 0;

    do
    {
      for (int i = 0; i <= NUM_LEDS + 2; i ++ )
      {
        q = i - 1;
        r = i - 2;
        p = i - 3;
        if (s < 1)
        {
          leds[i] =  CRGB( 0, 255, 0);
          leds[q] =  CRGB( 0, 255, 0);
          leds[r] =  CRGB( 0, 255, 0);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else if (s < 2)
        {
          leds[i] =  CRGB( 0, 0, 255);
          leds[q] =  CRGB( 0, 0, 255);
          leds[r] =  CRGB( 0, 0, 255);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else if (s < 3)
        {
          leds[i] =  CRGB( 255, 255, 0);
          leds[q] =  CRGB( 255, 255, 0);
          leds[r] =  CRGB( 255, 255, 0);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else if (s < 4)
        {
          leds[i] =  CRGB( 255, 0, 255);
          leds[q] =  CRGB( 255, 0, 255);
          leds[r] =  CRGB( 255, 0, 255);
          leds [p] = CRGB ( 0, 0, 0);
        }
        else
        {
          leds[i] =  CRGB( 255, 0, 0);
          leds[q] =  CRGB( 255, 0, 0);
          leds[r] =  CRGB( 255, 0, 0);
          leds [p] = CRGB ( 0, 0, 0);
        }
        FastLED.show();
        delay( 50 );
      }
      s++;
    }
    while (s <  5);
  }

  {
    int y = 0;
    do
    {
      // две бегущие навстречу тройки
      int j = 0;
      for (int i = 0; i <= NUM_LEDS; i ++ )
      {
        j = NUM_LEDS - i;
        leds[i + 2] =  CRGB( 255, 255, 255);
        leds[i + 1 ] =  CRGB( 0, 255, 0);
        leds[i] =  CRGB( 255, 0, 0);
        leds[i - 1] =  CRGB( 0, 0, 0);
        leds[j - 3] = CRGB( 255, 0, 255);
        leds[j - 2] = CRGB( 255, 255, 0);
        leds[j - 1] = CRGB( 0, 0, 255);
        leds[j ] = CRGB( 0, 0, 0);

        FastLED.show();
        delay(100 );
      }
      y++;
    }
    while ( y <  5);
  }
  {
    int  k = 0;
    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 255, 0, 0); // красный
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int  k = 0;
    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int  k = 0;
    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 0, 255, 0); // зеленый
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int  k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int  k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 0, 0, 255); // синий
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int  k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 0, 255, 255); // голубой
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int  k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 255, 0, 255); // фиолетовый
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }

  {
    int k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }
  {
    int k = 0;

    // заполнение одним бегущим LED
    do
    {
      int de = 5;
      for (int i = 0; i < NUM_LEDS - k; i ++ )
      {
        leds[i] =  CRGB( 255, 255, 0); //желтый
        leds[i - 1] =  CRGB( 0, 0, 0);
        FastLED.show();
        delay( de );
      }
      k++;
    }
    while (k < NUM_LEDS);
  }
  {
    int k = 0;

    // радуга от alexgyver
    do
    {
      for (int i = 0; i < NUM_LEDS; i++ ) {
        leds[i] = CHSV(counter + i * 8, 255, 255);  // HSV. Увеличивать HUE (цвет) (оттенок, насыщенность , уровень)
        // умножение i уменьшает шаг радуги
      }
      counter++;        // counter меняется от 0 до 255 (тип данных byte)
      FastLED.show();
      delay(2 );         // скорость движения радуги
      k++;
    }
    while (k < NUM_LEDS * 50);
  }

}
Комментарии про зависание после цикла строк 170-240 не актуальны, строки съехали при редактировании. Глюк был после цикла под комментарием "// бегущие тройки разных цветов"
 

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

★★★★✩✩✩
2 Авг 2018
727
208
У тебя осталось ещё несколько мест, где ты записываешь данные за пределы массива leds, тем самым перезаписывая другие переменные (включая, возможно, счётчик миллисов).
 
  • Лойс +1
Реакции: Roden

Andrei528

✩✩✩✩✩✩✩
12 Сен 2020
19
0
У тебя осталось ещё несколько мест, где ты записываешь данные за пределы массива leds, тем самым перезаписывая другие переменные (включая, возможно, счётчик миллисов).
Я начал заниматься этим (программированием) примерно неделю назад. Так что вполне возможны какие-то подобные недочёты.
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
Глюк был после цикла под комментарием "// бегущие тройки разных цветов"
вот именно в этом цикле вы постиоянно пишете "мимо" массива leds, как вам указал @Александр Симонов. Это очень грубая ошибка, чреватая зависанием и перезагрузкой кода.
Пока все подобные ошибки не будут исправлены - устойчивой работы кода ждать не стоит.
Я начал заниматься этим (программированием) примерно неделю назад. Так что вполне возможны какие-то подобные недочёты.
это не оправдание, ошибки все равно надо исправлять :)
 
  • Лойс +1
Реакции: Roden

Andrei528

✩✩✩✩✩✩✩
12 Сен 2020
19
0
вот именно в этом цикле вы постиоянно пишете "мимо" массива leds, как вам указал @Александр Симонов. Это очень грубая ошибка, чреватая зависанием и перезагрузкой кода.
Пока все подобные ошибки не будут исправлены - устойчивой работы кода ждать не стоит.

это не оправдание, ошибки все равно надо исправлять :)
Согласен с замечанием. Но я и не думал оправдываться. Просто свободное время - величина не бесконечная.

вот именно в этом цикле вы постиоянно пишете "мимо" массива leds, как вам указал @Александр Симонов.
Вы оба совершенно правы. Исключил оба "подозрительных" цикла, вернул millis() обратно вместо micros() и все заработало корректно. Они мне и самому глаз резали, хотя и работали. Буду думать как их грамотно заново создать. В любом случае спасибо за науку!
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
а я скажу как заново все делать
в цикл loop сделать так:
void loop()
{
effect_1();
effect_2();
effect_3();
...
}
и так далее.
По скольку переключения между эффектами нет,то можно так.
ну и ниже реализовывать (переписывать) эффекты по одному.
 
  • Лойс +1
Реакции: Andrei528

Andrei528

✩✩✩✩✩✩✩
12 Сен 2020
19
0
а я скажу как заново все делать
в цикл loop сделать так:
void loop()
{
effect_1();
effect_2();
effect_3();
...
}
и так далее.
По скольку переключения между эффектами нет,то можно так.
ну и ниже реализовывать (переписывать) эффекты по одному.
Сейчас полезу создание функций изучать 🤔