Бегущий огонек в адресной ленте

доброго дня!
мучаюсь с простейшей задачей - бегущий огонек по адресной ленте 2812, чтоб меняла направление движения по щелчку кнопки.
программу пишу в ardublock 2.0
направление могу поменять только когда огонек добежит до конца ленты и в этот момент нажать на кнопку.
подскажите - как сделать правильно?
и нигде не нашел как с угасающим шлейфом сделать…

боюсь тут мало специалистов по данной прокладке.
все вопросы к автору
Автор ArduBlock - Петров Виталий Николаевич

а так:

long D = 0;
long N = 0;
long B = 30;
long Y = 255;

 #include <Adafruit_NeoPixel.h>
 #ifdef __AVR__
  #include <avr/power.h>
 #endif
 long Pixcil = 0;
 long NeoPix = 0;

 Adafruit_NeoPixel strip2(30, 2, NEO_GRB + NEO_KHZ800);


void my_1() {
    Pixcil = 30;
    NeoPix = 30 - 0;
   //Pixcil = NeoPix;
   for (int count = 0; count < NeoPix; count++) {
     strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(255,0,0));
       strip2.show();
      delay(100);
      strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
        strip2.show();
     Pixcil = Pixcil - 1;
     }
       Pixcil = 30;
   delay(200);
    Pixcil = 30;
    NeoPix = 30 - 0;
   //Pixcil = NeoPix;
   for (int count = 0; count < NeoPix; count++) {
     strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(255,0,0));
       strip2.show();
      delay(200);
      strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
        strip2.show();
     Pixcil = Pixcil - 1;
     }
       Pixcil = 30;
   }

void my_2() {
   Pixcil = 0;
   NeoPix = 30 - Pixcil;
     for (int count = 0; count < NeoPix; count++) {
      Pixcil = Pixcil + 1;
       strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(51,255,255));
       strip2.show();
       delay(100);
      strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
        strip2.show();
        }
        Pixcil = 0;
   delay(200);
   Pixcil = 0;
   NeoPix = 30 - Pixcil;
     for (int count = 0; count < NeoPix; count++) {
      Pixcil = Pixcil + 1;
       strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(51,255,255));
       strip2.show();
       delay(200);
      strip2.setBrightness(255);
        strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
        strip2.show();
        }
        Pixcil = 0;
   }


void setup() {
  pinMode(5, INPUT_PULLUP);

   #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
   clock_prescale_set(clock_div_1);
 #endif

    strip2.begin();
  strip2.show();
  strip2.setBrightness(50);

}

void loop() {
    if (digitalRead(5) == 0) {
      N = N + 1;
      if (N > 1) {
        N = 0;
      }
      delay(5);
    }
    if (N == 0) {
      my_2();
    }
    if (N == 1) {
      my_1();
    }

}

За “так” Вас тут по размажут как сплав Розе по дорожкам. Зря Вы не прочитали текст, который был в пустом окне сообщения (Вам его уже привели). Исправьте свой пост пока не поздно.

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

Нужно искать пазл вроде “включить пиксель энный цветом таким то”. Если пазла такого нет, попросить автора его написать. А потом кнопкой менять просто +1 на -1 и будет бегущий огонёк туда-сюда.

1 переписать все с нуля, начать с рисования алгоритма на бумажке
2 решение в лоб → в функциях my_1 my_2 читать кнопку, и в случае ее нажатия выходить из функции.

а как выходить из функции?

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

можно короткий пример?

Строки 108-113 постепенное гашение хвоста … на каждом отображении вычитается число из значения …

круть! спасибо! еще бы кнопку туда добавить))

мда…вы так далеко не уедете, не зная основ, почитайте уже что нибудь.
Оператор return (C) | Microsoft Learn

Добавил …

невероятно круто и огромное спасибо!
подскажите еще плз - как в вашем примере сделать только белый цвет и уменьшить скорость пролета светящегося диода по ленте?

с 107-109 убрать random и оставить только 255…

после 119 вставить delay(100); 100 поменять на свой вкус

получается зеленый

  pixels[p][0]=255;
  pixels[p][1]=255;
  pixels[p][2]=255;