Оптимизация скетча. Проблема: Нехватка ОЗУ

Привет форум энтузиастов.
Что имеем: Arduino mega, led лента 20 шт по 89 диодов на ws2812b. Dfplayer_mini -1 шт, Матрица 16х16 на ws2812b, датчик вибрации и наклона 520 - 24 шт.
Что хочется добавить: +1 матрица 16х12, Ик приемник.
Что должно получиться: Ик пульт переключает режимы ( один из 4). Согласно режиму разжигается анимация.
Проблема: Не хватка озу. Слишком толстая библиотека FastLED была заменена на microLED. Но для управления матрицей была оставлена FastLED. Да и в принципе код какой-то топорый и не оптимизированный. Хочется затолкать всё в одну мегу. Ставить вторую ардуинку не хочется. Скетч приложу. Критику и замечания приветсвуем. Хочется услышать мнение форума и советы.
С уважением Sonic

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

ССЫЛКА УДАЛЕНА, ВСТАВЬТЕ ПОЖАЛУЙСТА КОД ПО ПРАВИЛАМ ФОРУМА

В Ладу-Калину не входит 20 мешков цемента для дачи! Прошу совета, вторую машину покупать не хочу - её ставить негде.

Очень даже входит, но хреновато “ездить”.
Вот если бы мешки с картошкой были, то двадцать да - многовато чтобы поместилось в калине … ))))

А код-то где?

И, кстати, схема - тоже.

рисует, там жеж пока 2000 светодиодов нарисуешь )))

3 лайка
#include <microLED.h>
#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>
#include <FastLED.h>
#include "font.h"
#define DATA_PIN 44
#define button 21
#define NUM_LEDS 512
#define MATRIX_WIDTH 32
#define MATRIX_HEIGHT 32
#define BRIGHTNESS 120



int8_t time = 90;
int8_t sa0 = 0;
int8_t sa1 = 0;
int8_t sa2 = 0;
int8_t sa3 = 0;
int8_t sa4 = 0;
int8_t sa5 = 0;
int8_t sa6 = 0;
int8_t sa7 = 0;
int8_t sa8 = 0;
int8_t sa9 = 0;
int8_t sa10 = 0;
int8_t sa11 = 0;
int8_t sa12 = 0;
int8_t sa13 = 0;
int8_t sa14 = 0;
int8_t sa15 = 0;
int8_t sa16 = 0;
int8_t sa17 = 0;
int8_t sa18 = 0;
int8_t sa19 = 0;
int8_t sa20 = 0;
int8_t sa21 = 0;
int8_t sa22 = 0;
int8_t sa23 = 0;
int8_t clear_c = 0;
int8_t find = 0;

uint32_t myTimer1;
//константы и переменные для работы с текстом
const String fontNumStr = "0123456789 !,.:;?";
//const String fontLetStr = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

//переменные для работы с бегущей строкой
uint16_t lineStart = 0;                    //с какого столбца строки начинаем вопроизведение текста
uint16_t lineFin = 0;                      //каким столбцом строки заканчиваем вопроизведение текста
uint8_t startRunLineX = MATRIX_WIDTH - 1;  //столбец X начала отрисовки бегущей строки

uint16_t curPixel;
uint8_t curX;
uint8_t curY;
CRGB leds[NUM_LEDS];

#define RX 18
#define TX 19
SoftwareSerial mySerial(RX, TX);
DFPlayerMini_Fast myDFPlayer;
// пример работы с несколькими лентами
#define LED1 22  // пин ленты 1
#define LED2 23  // пин ленты 1
#define LED3 24
#define LED4 25
#define LED5 26
#define LED6 27
#define LED7 28
#define LED8 29
#define LED9 30
#define LED10 31
#define LED11 32
#define LED12 33
#define LED13 34
#define LED14 35
#define LED15 36
#define LED16 37
#define LED17 38
#define LED18 39
#define LED19 40
#define LED20 41
#define NUMLEDS_1 89  // кол-во светодиодов ленты X
#define NUMLEDS_2 89  // Y
// настройки влияют на обе ленты сразу!
#define COLOR_DEBTH 1  // цветовая глубина: 1, 2, 3 (в байтах)
// Леды по оси Х
microLED<NUMLEDS_2, LED1, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_1;
microLED<NUMLEDS_2, LED2, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_2;
microLED<NUMLEDS_2, LED3, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_3;
microLED<NUMLEDS_2, LED4, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_4;
microLED<NUMLEDS_2, LED5, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_5;
microLED<NUMLEDS_2, LED6, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_6;
microLED<NUMLEDS_2, LED7, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_7;
microLED<NUMLEDS_2, LED8, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_8;
microLED<NUMLEDS_2, LED9, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_9;
microLED<NUMLEDS_2, LED10, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_10;
microLED<NUMLEDS_2, LED11, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_11;
microLED<NUMLEDS_2, LED12, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_12;
// Леды по оси Y
microLED<NUMLEDS_1, LED13, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_13;
microLED<NUMLEDS_1, LED14, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_14;
microLED<NUMLEDS_1, LED15, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_15;
microLED<NUMLEDS_1, LED16, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_16;
microLED<NUMLEDS_1, LED17, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_17;
microLED<NUMLEDS_1, LED18, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_18;
microLED<NUMLEDS_1, LED19, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_19;
microLED<NUMLEDS_1, LED20, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip_20;

const int vibrationPin23 = 11;  // Пин, к которому подключен датчик вибрации 1
const int vibrationPin17 = 10;  // Пин, к которому подключен датчик вибрации 2
const int vibrationPin16 = 9;   // Пин, к которому подключен датчик вибрации 3
const int vibrationPin22 = 8;   // Пин, к которому подключен датчик вибрации 4
const int vibrationPin0 = 7;    // Пин, к которому подключен датчик вибрации 5
const int vibrationPin1 = 6;    // Пин, к которому подключен датчик вибрации 6
const int vibrationPin6 = 5;    // Пин, к которому подключен датчик вибрации 7
const int vibrationPin7 = 4;    // Пин, к которому подключен датчик вибрации 8
const int vibrationPin2 = 3;    // Пин, к которому подключен датчик вибрации 9
const int vibrationPin3 = 2;    // Пин, к которому подключен датчик вибрации 10
const int vibrationPin9 = 1;    // Пин, к которому подключен датчик вибрации 11
const int vibrationPin8 = 0;    // Пин, к которому подключен датчик вибрации 12
const int vibrationPin5 = 14;   // Пин, к которому подключен датчик вибрации 13
const int vibrationPin11 = 15;  // Пин, к которому подключен датчик вибрации 14
const int vibrationPin4 = 16;   // Пин, к которому подключен датчик вибрации 15
const int vibrationPin10 = 17;  // Пин, к которому подключен датчик вибрации 16
const int vibrationPin13 = 46;  // Пин, к которому подключен датчик вибрации 17
const int vibrationPin19 = 47;  // Пин, к которому подключен датчик вибрации 18
const int vibrationPin12 = 48;  // Пин, к которому подключен датчик вибрации 19
const int vibrationPin18 = 49;  // Пин, к которому подключен датчик вибрации 20
const int vibrationPin21 = 50;  // Пин, к которому подключен датчик вибрации 21
const int vibrationPin20 = 51;  // Пин, к которому подключен датчик вибрации 22
const int vibrationPin14 = 52;  // Пин, к которому подключен датчик вибрации 23
const int vibrationPin15 = 53;  // Пин, к которому подключен датчик вибрации 24

int  state = 1;
int point = 0;
int point1 = 0;
int taimer = 90;
int pos = 0;

int timer1;




void setPixel(byte x, byte y, uint32_t color) {
  uint16_t curLed;
  if (x % 2 == 0) {
    curLed = MATRIX_HEIGHT * x + y;
  } else {
    curLed = (MATRIX_HEIGHT * (x + 1) - 1) - y;
  }

  leds[curLed] = color;
}

byte getPixel(uint8_t vertPixels, byte startY, uint32_t color) {
  byte pixel;
  for (int k = 7; k >= 0; k--) {  //
    pixel = ((vertPixels >> k) & 0x01);
    if (pixel == 1) {
      setPixel(curX, curY, color);
    }
    curY++;
  }
  curY = startY;
  curX++;
}



void showText(String text, byte startX, byte startY, uint32_t color) {  //вывод статического текста
  int i;
  byte n;
  bool isRusLetter = false;
  byte vertPixels;

  curX = startX;
  curY = startY;

  for (i = 0; i < text.length(); i++) {
    if (int(text[i]) >= 0) {  //цифры и символы
      n = fontNumStr.indexOf(text[i]);
      for (byte j = 0; j < 4; j++) {
        vertPixels = pgm_read_byte(&(font7num[n][j]));
        if ((j == 0) || (vertPixels > 0)) {  //только первая колонка и не пустые колонки
          getPixel(vertPixels, startY, color);
        }
        if (curX >= MATRIX_WIDTH) {
          break;
        }
      }
      curX++;
      if (curX >= MATRIX_WIDTH) {
        break;
      }
    } else {  //русские буквы
      if (isRusLetter == true) {
        isRusLetter = false;
        n = 112 + int(text[i]);
        for (byte j = 0; j < 7; j++) {
          vertPixels = pgm_read_byte(&(font7let[n][j]));

          if ((j == 0) || (vertPixels > 0) || ((n == 27) && (j < 6))) {  //только первая колонка, не пустые колонки и исключения буквы Ы
            getPixel(vertPixels, startY, color);
          }
          if (curX >= MATRIX_WIDTH) {
            break;
          }
        }
        curX++;
        if (curX >= MATRIX_WIDTH) {
          break;
        }
      } else {
        isRusLetter = true;
      }
    }
  }
}


 

void clear() {
  strip_1.clear();
  strip_1.show();
  strip_2.clear();
  strip_2.show();
  strip_3.clear();
  strip_3.show();
  strip_4.clear();
  strip_4.show();
  strip_5.clear();
  strip_5.show();
  strip_6.clear();
  strip_6.show();
  strip_7.clear();
  strip_7.show();
  strip_8.clear();
  strip_8.show();
  strip_9.clear();
  strip_9.show();
  strip_10.clear();
  strip_10.show();
  strip_11.clear();
  strip_11.show();
  strip_12.clear();
  strip_12.show();
  strip_13.clear();
  strip_13.show();
  strip_14.clear();
  strip_14.show();
  strip_15.clear();
  strip_15.show();
  strip_17.clear();
  strip_16.show();
  strip_17.clear();
  strip_17.show();
  strip_18.clear();
  strip_18.show();
  strip_19.clear();
  strip_19.show();
  strip_20.clear();
  strip_20.show();
}


void set0_g5() {
  int startx = 0;
  int endx = 13;

  int starty = 0;
  int endy = 12;

  strip_1.fill(startx, endx, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_2.fill(startx, endx, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  //16 9  15 12
  strip_14.fill(starty, endy, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  //
  strip_16.fill(starty, endy, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_1.show();
  delay(1);
  strip_2.show();  // выводим изменения
  delay(1);
  strip_14.show();
  delay(1);
  strip_16.show();  // выводим изменения
  delay(1);
}

void set0_0() {
  int startx = 0;
  int endx = 13;

  int starty = 0;
  int endy = 12;

  strip_1.fill(startx, endx, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_2.fill(startx, endx, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  //16 9  15 12
  strip_14.fill(starty, endy, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  //
  strip_16.fill(starty, endy, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_1.show();
  delay(1);
  strip_2.show();  // выводим изменения
  delay(1);
  strip_14.show();
  delay(1);
  strip_16.show();  // выводим изменения
  delay(1);
}


void set0() {
  int startx = 0;
  int endx = 13;

  int starty = 0;
  int endy = 12;

  strip_1.fill(startx, endx, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_2.fill(startx, endx, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  //16 9  15 12
  strip_14.fill(starty, endy, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  //
  strip_16.fill(starty, endy, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_1.show();
  delay(1);
  strip_2.show();  // выводим изменения
  delay(1);
  strip_14.show();
  delay(1);
  strip_16.show();  // выводим изменения
  delay(1);
}


void set1() {
  int startx = 0;
  int endx = 12;

  int starty = 15;
  int endy = 27;

  strip_3.fill(startx, endx, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_4.fill(startx, endx, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_14.fill(starty, endy, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_16.fill(starty, endy, mWheel8(100));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_3.show();
  delay(1);
  strip_4.show();  // выводим изменения
  delay(1);
  strip_14.show();
  delay(1);
  strip_16.show();  // выводим изменения
  delay(1);
}


void set1_1() {
  int startx = 0;
  int endx = 12;

  int starty = 15;
  int endy = 27;

  strip_3.fill(startx, endx, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_4.fill(startx, endx, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_14.fill(starty, endy, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_16.fill(starty, endy, mWheel8(200));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_3.show();
  delay(1);
  strip_4.show();  // выводим изменения
  delay(1);
  strip_14.show();
  delay(1);
  strip_16.show();  // выводим изменения
  delay(1);
}

void set1_g5() {
  int startx = 0;
  int endx = 12;

  int starty = 15;
  int endy = 27;

  strip_3.fill(startx, endx, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_4.fill(startx, endx, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_14.fill(starty, endy, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1

  strip_16.fill(starty, endy, mWheel8(50));  // заливаем ~зелёным с 3 по 6: счёт идёт с 0, заливается до указанного -1


  strip_3.show();
  delay(1);
  strip_4.show();  // выводим изменения
  delay(1);
  strip_14.show();
  delay(1);
  strip_16.show();  // выводим изменения
  delay(1);
}





void zastavka() {
  if (state == 0) {
    yeild();
    for (int i = 0; i < NUMLEDS_1; i++) {
      yeild();
      strip_1.leds[i] = mGreen;
      strip_2.leds[i] = mGreen;
      strip_3.leds[i] = mGreen;
      strip_4.leds[i] = mGreen;
      strip_5.leds[i] = mGreen;
      strip_6.leds[i] = mGreen;
      strip_7.leds[i] = mGreen;
      strip_8.leds[i] = mGreen;
      strip_9.leds[i] = mGreen;
      strip_10.leds[i] = mGreen;
      strip_11.leds[i] = mGreen;
      strip_12.leds[i] = mGreen;
      strip_13.leds[i] = mGreen;
      strip_14.leds[i] = mGreen;
      strip_15.leds[i] = mGreen;
      strip_16.leds[i] = mGreen;
      strip_17.leds[i] = mGreen;
      strip_18.leds[i] = mGreen;
      strip_19.leds[i] = mGreen;
      strip_20.leds[i] = mGreen;





      if (i == NUMLEDS_1) { i = 0; }
    }

    strip_1.show();
    strip_2.show();
    strip_3.show();
    strip_4.show();
    strip_5.show();
    strip_6.show();
    strip_7.show();
    strip_8.show();
    strip_9.show();
    strip_10.show();
    strip_11.show();
    strip_12.show();
    strip_13.show();
    strip_14.show();
    strip_15.show();
    strip_16.show();
    strip_17.show();
    strip_18.show();
    strip_19.show();
    strip_20.show();
    delay(3000);





    for (int i = 0; i < NUMLEDS_1; i++) {
      yeild();
      strip_1.leds[i] = mRed;
      strip_2.leds[i] = mRed;
      strip_3.leds[i] = mRed;
      strip_4.leds[i] = mRed;
      strip_5.leds[i] = mRed;
      strip_6.leds[i] = mRed;
      strip_7.leds[i] = mRed;
      strip_8.leds[i] = mRed;
      strip_9.leds[i] = mRed;
      strip_10.leds[i] = mRed;
      strip_11.leds[i] = mRed;
      strip_12.leds[i] = mRed;
      strip_13.leds[i] = mRed;
      strip_14.leds[i] = mRed;
      strip_15.leds[i] = mRed;
      strip_16.leds[i] = mRed;
      strip_17.leds[i] = mRed;
      strip_18.leds[i] = mRed;
      strip_19.leds[i] = mRed;
      strip_20.leds[i] = mRed;




      if (i == NUMLEDS_1) { i = 0; }
    }

    strip_1.show();
    strip_2.show();
    strip_3.show();
    strip_4.show();
    strip_5.show();
    strip_6.show();
    strip_7.show();
    strip_8.show();
    strip_9.show();
    strip_10.show();
    strip_11.show();
    strip_12.show();
    strip_13.show();
    strip_14.show();
    strip_15.show();
    strip_16.show();
    strip_17.show();
    strip_18.show();
    strip_19.show();
    strip_20.show();
    delay(3000);


    for (int i = 0; i < NUMLEDS_1; i++) {
      yeild();
      strip_1.leds[i] = mBlue;
      strip_2.leds[i] = mBlue;
      strip_3.leds[i] = mBlue;
      strip_4.leds[i] = mBlue;
      strip_5.leds[i] = mBlue;
      strip_6.leds[i] = mBlue;
      strip_7.leds[i] = mBlue;
      strip_8.leds[i] = mBlue;
      strip_9.leds[i] = mBlue;
      strip_10.leds[i] = mBlue;
      strip_11.leds[i] = mBlue;
      strip_12.leds[i] = mBlue;
      strip_13.leds[i] = mBlue;
      strip_14.leds[i] = mBlue;
      strip_15.leds[i] = mBlue;
      strip_16.leds[i] = mBlue;
      strip_17.leds[i] = mBlue;
      strip_18.leds[i] = mBlue;
      strip_19.leds[i] = mBlue;
      strip_20.leds[i] = mBlue;


      if (i == NUMLEDS_1) { i = 0; }
    }
    strip_1.show();
    strip_2.show();
    strip_3.show();
    strip_4.show();
    strip_5.show();

    strip_6.show();

    strip_7.show();

    strip_8.show();

    strip_9.show();
    strip_10.show();
    strip_11.show();
    strip_12.show();
    strip_13.show();
    strip_14.show();
    strip_15.show();
    strip_16.show();
    strip_17.show();
    strip_18.show();
    strip_19.show();
    strip_20.show();
    delay(3000);

    clear();
    // zmeika
    set0();
    delay(250);
    set1();
    delay(250);
    set2();
    delay(250);
    set3();
    delay(250);
    set4();
    delay(250);
    set5();
    delay(250);
    set11();
    delay(250);
    set10();
    delay(250);
    set9();
    delay(250);
    set8();
    delay(250);
    set7();
    delay(250);
    set6();
    delay(250);
    set12();
    delay(250);
    set13();
    delay(250);
    set14();
    delay(250);
    set15();
    delay(250);
    set16();
    delay(250);
    set17();
    delay(250);
    set23();
    delay(250);
    set22();
    delay(250);
    set21();
    delay(250);
    set20();
    delay(250);
    set19();
    delay(250);
    set18();

    for (int i = 0; i < NUMLEDS_1; i++) {
      yeild();
      strip_1.leds[i] = mGreen;
      strip_2.leds[i] = mGreen;
      strip_3.leds[i] = mGreen;
      strip_4.leds[i] = mGreen;
      strip_5.leds[i] = mGreen;
      strip_6.leds[i] = mGreen;
      strip_7.leds[i] = mGreen;
      strip_8.leds[i] = mGreen;
      strip_9.leds[i] = mGreen;
      strip_10.leds[i] = mGreen;
      strip_11.leds[i] = mGreen;
      strip_12.leds[i] = mGreen;
      strip_13.leds[i] = mGreen;
      strip_14.leds[i] = mGreen;
      strip_15.leds[i] = mGreen;
      strip_16.leds[i] = mGreen;
      strip_17.leds[i] = mGreen;
      strip_18.leds[i] = mGreen;
      strip_19.leds[i] = mGreen;
      strip_20.leds[i] = mGreen;





      if (i == NUMLEDS_1) { i = 0; }
    }

    strip_1.show();
    strip_2.show();
    strip_3.show();
    strip_4.show();
    strip_5.show();
    strip_6.show();
    strip_7.show();
    strip_8.show();
    strip_9.show();
    strip_10.show();
    strip_11.show();
    strip_12.show();
    strip_13.show();
    strip_14.show();
    strip_15.show();
    strip_16.show();
    strip_17.show();
    strip_18.show();
    strip_19.show();
    strip_20.show();
    delay(3000);



    clear();

    //kolonna
    set18_18();
    set12_12();
    set6_6();
    set0_0();
    delay(500);
    set19_19();
    set13_13();
    set7_7();
    set1_1();
    delay(500);
    set20_20();
    set14_14();
    set8_8();
    set2_2();
    delay(500);
    set21_21();
    set15_15();
    set9_9();
    set3_3();
    delay(500);
    set22_22();
    set16_16();
    set10_10();
    set4_4();
    delay(500);
    set23_23();
    set17_17();
    set11_11();
    set5_5();
  }
}













void game1() {
  clear_c = 0;
  //Serial.println("***Game 1***");

  while ((taimer > 0) && (state == 1)) {
    FastLED.clear();
    yeild();
    if (sa0 == 0) {
      set0_0();
    } else if (sa0 == 1) {
      set0();
    }
    //
    if (sa1 == 0) {
      set1_1();
    } else if (sa1 == 1) {
      set1();
    }
    //
    if (sa2 == 0) {
      set2_2();
    } else if (sa2 == 1) {
      set2();
    }
    //
    if (sa3 == 0) {
      set3_3();
    } else if (sa3 == 1) {
      set3();
    }
    
    if (sa4 == 0) {
      set4_4();
    } else if (sa4 == 1) {
      set4();
    }
    
    if (sa5 == 0) {
      set5_5();
    } else if (sa5 == 1) {
      set5();
    }
    
    if (sa6 == 0) {
      set6_6();
    } else if (sa6 == 1) {
      set6();
    }
    //
    if (sa7 == 0) {
      set7_7();
    } else if (sa7 == 1) {
      set7();
    }
    //
    if (sa8 == 0) {
      set8_8();
    } else if (sa8 == 1) {
      set8();
    }
    //
    if (sa9 == 0) {
      set9_9();
    } else if (sa9 == 1) {
      set9();
    }
    //
    if (sa10 == 0) {
      set10_10();
    } else if (sa10 == 1) {
      set10();
    }
    //
    if (sa11 == 0) {
      set11_11();
    } else if (sa11 == 1) {
      set11();
    }
    //
    if (sa12 == 0) {
      set12_12();
    } else if (sa12 == 1) {
      set12();
    }
    if (sa13 == 0) {
      set13_13();
    } else if (sa13 == 1) {
      set13();
    }
    //
    if (sa14 == 0) {
      set14_14();
    } else if (sa14 == 1) {
      set14();
    }
    //
    if (sa15 == 0) {
      set15_15();
    } else if (sa15 == 1) {
      set15();
    }
    //
    if (sa16 == 0) {
      set16_16();
    } else if (sa16 == 1) {
      set16();
    }
    //
    if (sa17 == 0) {
      set17_17();
    } else if (sa17 == 1) {
      set17();
    }
    //
    if (sa18 == 0) {
      set18_18();
    } else if (sa18 == 1) {
      set18();
    }
    //
    if (sa19 == 0) {
      set19_19();
    } else if (sa19 == 1) {
      set19();
    }
    //
    if (sa20 == 0) {
      set20_20();
    } else if (sa20 == 1) {
      set20();
    }
    //
    if (sa21 == 0) {
      set21_21();
    } else if (sa21 == 1) {
      set21();
    }
    //
    if (sa22 == 0) {
      set22_22();
    } else if (sa22 == 1) {
      set22();
    }
    //
    if (sa23 == 0) {
      set23_23();
    } else if (sa23 == 1) {
      set23();
    }

    if (digitalRead(vibrationPin0) == HIGH) {
      myDFPlayer.play(1);
      set0();
      delay(200);
      set0_0();
      delay(200);
      set0();
      sa0 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin1) == HIGH) {
      myDFPlayer.play(1);
      set1();
      delay(200);
      set1_1();
      delay(200);
      set1();
      sa1 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin2) == HIGH) {
      myDFPlayer.play(1);
      sa2 = 1;
      set2();
      delay(200);
      set2_2();
      delay(200);
      set2();
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin3) == HIGH) {
      myDFPlayer.play(1);
      set3();
      delay(200);
      set3_3();
      delay(200);
      set3();
      sa3 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin4) == HIGH) {
      myDFPlayer.play(1);
      set4();
      delay(200);
      set4_4();
      delay(200);
      set4();
      sa4 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin5) == HIGH) {
      myDFPlayer.play(1);
      set5();
      delay(200);
      set5_5();
      delay(200);
      set5();
      sa5 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin6) == HIGH) {
      myDFPlayer.play(1);
      set6();
      delay(200);
      set6_6();
      delay(200);
      set6();
      sa6 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin7) == HIGH) {
      myDFPlayer.play(1);
      set7();
      delay(200);
      set7_7();
      delay(200);
      set7();
      sa7 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin8) == HIGH) {
      myDFPlayer.play(1);
      set8();
      delay(200);
      set8_8();
      delay(200);
      set8();
      sa8 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin9) == HIGH) {
      myDFPlayer.play(1);
      set9();
      delay(200);
      set9_9();
      delay(200);
      set9();
      sa9 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin10) == HIGH) {
      myDFPlayer.play(1);
      set10();
      delay(200);
      set10_10();
      delay(200);
      set10();
      sa10 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin11) == HIGH) {
      myDFPlayer.play(1);
      set11();
      delay(200);
      set11_11();
      delay(200);
      set11();
      sa11 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin12) == HIGH) {
      myDFPlayer.play(1);
      set12();
      delay(200);
      set12_12();
      delay(200);
      set12();
      sa12 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin13) == HIGH) {
      myDFPlayer.play(1);
      set13();
      delay(200);
      set13_13();
      delay(200);
      set13();
      sa13 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin14) == HIGH) {
      myDFPlayer.play(1);
      set14();
      delay(200);
      set14_14();
      delay(200);
      set14();
      sa14 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin15) == HIGH) {
      myDFPlayer.play(1);
      set15();
      delay(200);
      set15_15();
      delay(200);
      set15();
      sa15 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin16) == HIGH) {
      myDFPlayer.play(1);
      set16();
      delay(200);
      set16_16();
      delay(200);
      set16();
      sa16 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin17) == HIGH) {
      myDFPlayer.play(1);
      set17();
      delay(200);
      set17_17();
      delay(200);
      set17();
      sa17 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin18) == HIGH) {
      myDFPlayer.play(1);
      set18();
      delay(200);
      set18_18();
      delay(200);
      set18();
      sa18 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin19) == HIGH) {
      myDFPlayer.play(1);
      set19();
      delay(200);
      set19_19();
      delay(200);
      set19();
      sa19 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin20) == HIGH) {
      myDFPlayer.play(1);
      set20();
      delay(200);
      set20_20();
      delay(200);
      set20();
      sa20 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin21) == HIGH) {
      myDFPlayer.play(1);
      set21();
      delay(200);
      set21_21();
      delay(200);
      set21();
      sa21 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin22) == HIGH) {
      myDFPlayer.play(1);
      set22();
      delay(200);
      set22_22();
      delay(200);
      set22();
      sa22 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (digitalRead(vibrationPin23) == HIGH) {
      myDFPlayer.play(1);
      set23();
      delay(200);
      set23_23();
      delay(200);
      set23();
      sa23 = 1;
      point = point + 1;
      yeild();
      delay(1000);
    }
    if (taimer == 1) {
      break;
      myDFPlayer.play(1);
      //Serial.print("FINISH!");
    }
  }
}

void game2() {
  clear_c = 0;
  //Serial.println("***Game 2***");


  while ((taimer > 0) && (state == 2)) {

    FastLED.clear();
    yeild();
    if (sa0 == 0) {
      set0_0();
    } else if (sa0 == 1) {
      set0();
    }
    //
    if (sa1 == 0) {
      set1_1();
    } else if (sa1 == 1) {
      set1();
    }
    //
    if (sa2 == 0) {
      set2_2();
    } else if (sa2 == 1) {
      set2();
    }
    //
    if (sa3 == 0) {
      set3_3();
    } else if (sa3 == 1) {
      set3();
    }
    //
    if (sa4 == 0) {
      set4_4();
    } else if (sa4 == 1) {
      set4();
    }
    //
    if (sa5 == 0) {
      set5_5();
    } else if (sa5 == 1) {
      set5();
    }
    //
    if (sa6 == 0) {
      set6_6();
    } else if (sa6 == 1) {
      set6();
    }
    //
    if (sa7 == 0) {
      set7_7();
    } else if (sa7 == 1) {
      set7();
    }
    //
    if (sa8 == 0) {
      set8_8();
    } else if (sa8 == 1) {
      set8();
    }
    //
    if (sa9 == 0) {
      set9_9();
    } else if (sa9 == 1) {
      set9();
    }
    //
    if (sa10 == 0) {
      set10_10();
    } else if (sa10 == 1) {
      set10();
    }
    //
    if (sa11 == 0) {
      set11_11();
    } else if (sa11 == 1) {
      set11();
    }
    //
    if (sa12 == 0) {
      set12_12();
    } else if (sa12 == 1) {
      set12();
    }
    if (sa13 == 0) {
      set13_13();
    } else if (sa13 == 1) {
      set13();
    }
    //
    if (sa14 == 0) {
      set14_14();
    } else if (sa14 == 1) {
      set14();
    }
    //
    if (sa15 == 0) {
      set15_15();
    } else if (sa15 == 1) {
      set15();
    }
    //
    if (sa16 == 0) {
      set16_16();
    } else if (sa16 == 1) {
      set16();
    }
    //
    if (sa17 == 0) {
      set17_17();
    } else if (sa17 == 1) {
      set17();
    }
    //
    if (sa18 == 0) {
      set18_18();
    } else if (sa18 == 1) {
      set18();
    }
    //
    if (sa19 == 0) {
      set19_19();
    } else if (sa19 == 1) {
      set19();
    }
    //
    if (sa20 == 0) {
      set20_20();
    } else if (sa20 == 1) {
      set20();
    }
    //
    if (sa21 == 0) {
      set21_21();
    } else if (sa21 == 1) {
      set21();
    }
    //
    if (sa22 == 0) {
      set22_22();
    } else if (sa22 == 1) {
      set22();
    }
    //
    if (sa23 == 0) {
      set23_23();
    } else if (sa23 == 1) {
      set23();
    }


    if (find == 0) {

      while ((digitalRead(vibrationPin0) == LOW) && (state == 2))

      {
        yeild();
        set0();
      }
      if (digitalRead(vibrationPin0) == HIGH) { find = 23; }
    }

    if (find == 1) {

      while ((digitalRead(vibrationPin1) == LOW) && (state == 2)) {
        yeild();
        set1();
      }

      if (digitalRead(vibrationPin1) == HIGH) { find = 17; }
    }

    if (find == 2) {

      while ((digitalRead(vibrationPin2) == LOW) && (state == 2))

      {
        yeild();
        set0();
      }
      if (digitalRead(vibrationPin2) == HIGH) { find = 4; }
    }
    if (find == 3) {

      while ((digitalRead(vibrationPin3) == LOW) && (state == 2))

      {
        yeild();
        set3();
      }
      if (digitalRead(vibrationPin3) == HIGH) { find = 9; }
    }
    if (find == 4) {

      while ((digitalRead(vibrationPin4) == LOW) && (state == 2))

      {
        yeild();
        set4();
      }
      if ((digitalRead(vibrationPin4) == HIGH) && (state == 2)) { find = 2; }
    }
    if (find == 5) {

      while ((digitalRead(vibrationPin5) == LOW) && (state == 2)) {
        yeild();
        set5();
      }
      if (digitalRead(vibrationPin5) == HIGH) {
        find = 7;
      }
    }
    if (find == 6) {

      while ((digitalRead(vibrationPin0) == LOW) && (state == 2))

      {
        yeild();
        set0();
      }
      if (digitalRead(vibrationPin0) == HIGH) {
        find = 11;
      }
    }
    if (find == 7) {

      while ((digitalRead(vibrationPin7) == LOW) && (state == 2))

      {
        yeild();
        set7();
      }
      if (digitalRead(vibrationPin7) == HIGH) {
        find = 8;
      }
    }
    if (find == 8) {

      while ((digitalRead(vibrationPin8) == LOW) && (state == 2))

      {
        yeild();
        set8();
      }
      if (digitalRead(vibrationPin8) == HIGH) {
        find = 14;
      }
    }
    if (find == 9) {

      while ((digitalRead(vibrationPin9) == LOW) && (state == 2))

      {
        yeild();
        set9();
      }
      if (digitalRead(vibrationPin9) == HIGH) {
        find = 13;
      }
    }
    if (find == 10) {

      while ((digitalRead(vibrationPin10) == LOW) && (state == 2))

      {
        yeild();
        set10();
      }
      if (digitalRead(vibrationPin10) == HIGH) {
        find = 3;
      }
    }
    if (find == 11) {

      while ((digitalRead(vibrationPin11) == LOW) && (state == 2))

      {
        yeild();
        set11();
      }
      if (digitalRead(vibrationPin11) == HIGH) { find = 6; }
    }
    if (find == 12) {

      while ((digitalRead(vibrationPin12) == LOW) && (state == 2))

      {
        yeild();
        set12();
      }
      if (digitalRead(vibrationPin12) == HIGH) { find = 18; }
    }
    if (find == 13) {

      while ((digitalRead(vibrationPin13) == LOW) && (state == 2))

      {
        yeild();
        set13();
      }
      if (digitalRead(vibrationPin13) == HIGH) { find = 1; }
    }
    if (find == 14) {

      while ((digitalRead(vibrationPin14) == LOW) && (state == 2))

      {
        yeild();
        set14();
      }
      if (digitalRead(vibrationPin14) == HIGH) { find = 19; }
    }
    if (find == 15) {

      while ((digitalRead(vibrationPin15) == LOW) && (state == 2))

      {
        yeild();
        set15();
      }
      if (digitalRead(vibrationPin15) == HIGH) { find = 22; }
    }
    if (find == 16) {

      while ((digitalRead(vibrationPin16) == LOW) && (state == 2))

      {
        yeild();
        set16();
      }
      if (digitalRead(vibrationPin16) == HIGH) { find = 0; }
    }
    if (find == 17) {

      while ((digitalRead(vibrationPin17) == LOW) && (state == 2))

      {
        yeild();
        set17();
      }
      if (digitalRead(vibrationPin17) == HIGH) { find = 21; }
    }
    if (find == 18) {

      while ((digitalRead(vibrationPin18) == LOW) && (state == 2))

      {
        yeild();
        set18();
      }
      if (digitalRead(vibrationPin18) == HIGH) {
        find = 20;
      }
    }
    if (find == 19) {

      while ((digitalRead(vibrationPin19) == LOW) && (state == 2))

      {
        yeild();
        set19();
      }
      if (digitalRead(vibrationPin19) == HIGH) { find = 16; }
    }
    if (find == 20) {

      while ((digitalRead(vibrationPin20) == LOW) && (state == 2))

      {
        yeild();
        set20();
      }
      if (digitalRead(vibrationPin19) == HIGH) { find = 10; }
    }
    if (find == 21) {

      while ((digitalRead(vibrationPin21) == LOW) && (state == 2))

      {
        yeild();
        set21();
      }
      if (digitalRead(vibrationPin21) == HIGH) { find = 12; }
    }
    if (find == 22) {

      while ((digitalRead(vibrationPin22) == LOW) && (state == 2))

      {
        yeild();
        set22();
      }
      if (digitalRead(vibrationPin22) == HIGH) { find = 5; }
    }
    if (find == 23) {

      while ((digitalRead(vibrationPin23) == LOW) && (state == 2))

      {
        yeild();
        set23();
      }
      if (digitalRead(vibrationPin23) == HIGH) { find = 15; }
    }











    if ((taimer == 1) || (state != 2)) {
      break;
      myDFPlayer.play(1);
      //Serial.print("FINISH!");
    }
  }
}




void setup() {
  timer1 = millis();
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);  //0-255
  Serial.begin(9600);
  mySerial.begin(9600);
  if (!myDFPlayer.begin(mySerial)) {
    //Serial.println(F("Unable to begin:"));
    //Serial.println(F("1.Please recheck the connection!"));
    //Serial.println(F("2.Please insert the SD card!"));
    while (true)
      ;
  }
  myDFPlayer.volume(30);  // Установите громкость (от 0 до 30)
                          // myDFPlayer.play(2);     // Воспроизведение файла № 1
  // управляем яркостью
  strip_1.setBrightness(255);
  strip_2.setBrightness(255);
  strip_3.setBrightness(255);
  strip_4.setBrightness(255);
  strip_5.setBrightness(255);
  strip_6.setBrightness(255);
  strip_7.setBrightness(255);
  strip_8.setBrightness(255);
  strip_9.setBrightness(255);
  strip_10.setBrightness(255);
  strip_11.setBrightness(255);
  strip_12.setBrightness(255);
  strip_13.setBrightness(255);
  strip_14.setBrightness(255);
  strip_15.setBrightness(255);
  strip_16.setBrightness(255);
  strip_17.setBrightness(255);
  strip_18.setBrightness(255);
  strip_19.setBrightness(255);
  strip_20.setBrightness(255);
  pinMode(vibrationPin0, INPUT_PULLUP);
  pinMode(vibrationPin1, INPUT_PULLUP);
  pinMode(vibrationPin2, INPUT_PULLUP);
  pinMode(vibrationPin3, INPUT_PULLUP);
  pinMode(vibrationPin4, INPUT_PULLUP);
  pinMode(vibrationPin5, INPUT_PULLUP);
  pinMode(vibrationPin6, INPUT_PULLUP);
  pinMode(vibrationPin7, INPUT_PULLUP);
  pinMode(vibrationPin8, INPUT_PULLUP);
  pinMode(vibrationPin9, INPUT_PULLUP);
  pinMode(vibrationPin10, INPUT_PULLUP);
  pinMode(vibrationPin11, INPUT_PULLUP);
  pinMode(vibrationPin12, INPUT_PULLUP);
  pinMode(vibrationPin13, INPUT_PULLUP);
  pinMode(vibrationPin14, INPUT_PULLUP);
  pinMode(vibrationPin15, INPUT_PULLUP);
  pinMode(vibrationPin16, INPUT_PULLUP);
  pinMode(vibrationPin17, INPUT_PULLUP);
  pinMode(vibrationPin18, INPUT_PULLUP);
  pinMode(vibrationPin19, INPUT_PULLUP);
  pinMode(vibrationPin20, INPUT_PULLUP);
  pinMode(vibrationPin21, INPUT_PULLUP);
  pinMode(vibrationPin22, INPUT_PULLUP);
  pinMode(vibrationPin23, INPUT_PULLUP);
  pinMode(button, INPUT_PULLUP);
}

void loop() {
  yeild();

  if (state == 0) {
    //Serial.print("ZASTAVKA");
    zastavka();
  }
  if (state == 1) {
    //Serial.print("Solo rejim");
    game1();
  }
  if (state == 2) {
    //Serial.print("Random rejim");
    game2();
  }
  if (state == 3) {
    //Serial.print("Detskii ");
    game4();
  }
  if (state == 4) {
    //Serial.print("Ochkirejim");
    game5();
  }
  
}




void yeild() {
  if (millis() - myTimer1 >= 1000) {  // таймер на 500 мс (2 раза в сек)
    myTimer1 = millis();              // сброс таймера
                                      // выполнить действие 1
    taimer = taimer - 1;
  

    if (taimer > 0) {
      FastLED.clear();
      showText(String(taimer), 3, 1, 0xff00ff00);
      //showText(String(point), 0,9, 0xff00ff00);
      showText(String(point), 5, 9, 0xffff0000);
      FastLED.show();
    }
	
	if (digitalRead(button)==LOW)
	{
		state=state+1;
		
		if (state==5)
		{
			state=0;
			//Serial.println("State" + state);
		}
		
		
	}
	
	
  }
    }


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

НУ ваша критика объективна но здесь ж вопрос про то что скетч на самом деле можно ужать многое просто опыта маловато. К примеру цифры я могу на матрице разжигать через библиотеку микролед но как правильно сделать пока тоже не понятно для меня. Вот хотелось бы услышать критику, советы, какое-то направление как сделать лучше а так за критику с ноткой юмора спасибо большое оценил ))) :rofl:

схема имеется ) на все 2000 диодов как говорили :rofl: :rofl: :rofl: :rofl:


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

Всё зависит от необходимого количества цветов !

А где мне взять Ваш файл Font.h ?

Взломать Ваш компьютер? Так это статья! Оно мне надо?

Я не смотрел подробно ваш скетч.
Если хочется все уложить в одну мега, и расчет данных для лент не использует текущие значения в массива, то может быть можно использовать для нескольких лент один массив.
И в целом - хорошо бы иметь список, что сколько памяти требует, и где можно сократить.

Вот, именно для этого я и хочу скомпилировать код, но ТС устроил режим секретности - не хочет выкладывать.

я хочу выложить просто здесь не пролазит. выложил сюда Бесплатный и быстрый файлообменник

мне только зеленый и фиолетовый нужен на лентах, матрица только зеленый и красный

Что не пролазит?

код длиннее чем можно вложить в сообщение на форуме :rofl: :rofl: :rofl:

Т.е. вы хотите, чтобы кто-то разбирался в вашем коде на много-много тысяч строк?

я хотел получить совет как лучше быть но адекватного нечего пока не слышу кроме как вода мокрая