Помогите пожалуйста уменьшить размер скетча.

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020
#include "FastLED.h"          // библиотека для работы с лентой
 
#define LED_COUNT 600          // число светодиодов в кольце/ленте
#define LED_DT 13             // пин, куда подключен DIN ленты
 
int max_bright = 100;          // максимальная яркость (0 - 255)
boolean adapt_light = 0;       // адаптивная подсветка (1 - включить, 0 - выключить)
 
byte fav_modes[] = {2, 3, 4, 6, 11, 19, 22, 30, 33, 35, 37, 39, 101};  // список "любимых" режимов
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;
 
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);
  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 > 500) {     // каждые полсекунды
      last_bright = millis();               // сброить таймер
      new_bright = map(analogRead(6), 1, 1000, 3, max_bright);   // считать показания с фоторезистора, перевести диапазон
      LEDS.setBrightness(new_bright);        // установить новую яркость
    }
  }
 
  /*
    if (Serial.available() > 0) {     // если что то прислали
      ledMode = Serial.parseInt();    // парсим в тип данных int
      change_mode(ledMode);           // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
    }
  */
  switch (ledMode) {
    case  2: rainbow_fade(); break;            // плавная смена цветов всей ленты
    case  3: rainbow_loop(); break;            // крутящаяся радуга
    case  4: random_burst(); break;            // случайная смена цветов
    case  6: color_bounceFADE(); break;        // бегающий паровозик светодиодов
    case 11: pulse_one_color_all_rev(); break; // пульсация со сменой цветов
    case 22: flame(); break;                   // эффект пламени
    case 30: new_rainbow_loop(); break;        // крутая плавная вращающаяся радуга
    case 33: colorWipe(0x00, 0xff, 0x00, thisdelay);
      colorWipe(0x00, 0x00, 0x00, thisdelay); break;                                // плавное заполнение цветом
    case 35: Fire(55, 120, thisdelay); break;                                       // линейный огонь
    case 37: rainbowCycle(thisdelay); break;                                        // очень плавная вращающаяся радуга
    case 39: RunningLights(0xff, 0xff, 0x00, thisdelay); break;                     // бегущие огни
     case 101: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL WHITE
  }
}
 
void btnISR() {
  if (millis() - btnTimer > 150) {
    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 6: thisdelay = 80; thishue = 0; break;         //---CYLON v2
    case 11: thisdelay = 30; thishue = 0; break;        //---PULSE COLOR SATURATION
    //---PLACEHOLDER FOR COLOR LOOP VAR DELAY VARS
    case 30: thisdelay = 15; break;                      //---NEW RAINBOW LOOP
    case 33: thisdelay = 50; break;                     // colorWipe
    case 37: thisdelay = 20; break;                     // rainbowCycle
    case 39: thisdelay = 50; break;                     // RunningLights
 
    case 101: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL WHITE
 
  }
  bouncedirection = 0;
  one_color_all(0, 0, 0);
  ledMode = newmode;
}
MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

Немного удалил ненужные обьекты, но всё равно занимает 103%.

 

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

вот код:

 

#include "FastLED.h"          // библиотека для работы с лентой
 
#define LED_COUNT 600          // число светодиодов в кольце/ленте
#define LED_DT 13             // пин, куда подключен DIN ленты
 
int max_bright = 100;          // максимальная яркость (0 - 255)
boolean adapt_light = 0;       // адаптивная подсветка (1 - включить, 0 - выключить)
 
byte fav_modes[] = {2, 3, 4, 6, 11, 19, 22, 30, 33, 35, 37, 39, 101};  // список "любимых" режимов
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;
 
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);
  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 > 500) {     // каждые полсекунды
      last_bright = millis();               // сброить таймер
      new_bright = map(analogRead(6), 1, 1000, 3, max_bright);   // считать показания с фоторезистора, перевести диапазон
      LEDS.setBrightness(new_bright);        // установить новую яркость
    }
  }
 
  /*
    if (Serial.available() > 0) {     // если что то прислали
      ledMode = Serial.parseInt();    // парсим в тип данных int
      change_mode(ledMode);           // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
    }
  */
  switch (ledMode) {
    case  2: rainbow_fade(); break;            // плавная смена цветов всей ленты
    case  4: random_burst(); break;            // случайная смена цветов
    case 11: pulse_one_color_all_rev(); break; // пульсация со сменой цветов
    case 30: new_rainbow_loop(); break;        // крутая плавная вращающаяся радуга
     case 101: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL WHITE
  }
}
 
void btnISR() {
  if (millis() - btnTimer > 150) {
    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 2: thisdelay = 60; break;                      //---STRIP RAINBOW FADE
    case 4: thisdelay = 20; break;                      //---RANDOM BURST
    case 11: thisdelay = 30; thishue = 0; break;        //---PULSE COLOR SATURATION
    //---PLACEHOLDER FOR COLOR LOOP VAR DELAY VARS
    case 30: thisdelay = 15; break;                      //---NEW RAINBOW LOOP
 
    case 101: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL WHITE
 
  }
  bouncedirection = 0;
  one_color_all(0, 0, 0);
  ledMode = newmode;
}
RxMaxx
Offline
Зарегистрирован: 10.04.2020

Для начала все int, какие можно, на byte поменяйте...

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

осталось 2078 из 2048 возможных(1% всё равно лишний)

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020
void loop() {
  if (adapt_light) {                        // если включена адаптивная яркость
    if (millis() - last_bright > 500) {     // каждые полсекунды
      last_bright = millis();               // сброить таймер
      new_bright = map(analogRead(6), 1, 1000, 3, max_bright);   // считать показания с фоторезистора, перевести диапазон
      LEDS.setBrightness(new_bright);        // установить новую яркость
    }
  } 
 
 
удалить бы вот этот ненужный кусок кода, который для фоторезистора, который я не использую
DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Дак а автора кода чо не спросишь?

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

осталось блин 30 байт всего лишних. а автора ищи свищи

Komandir
Offline
Зарегистрирован: 18.08.2018

Вангую - надо уменьшить количество светодиодов ! Не хватает ОЗУ для 600 диодов. Или надо другую бибилотеку, где есть возможность уменьшить битность цвета ...

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

как раз таки нужно 600 светодиодов, ибо это полный круг на потолок, который мне нужен. а под другую библиотеку переписывать нужно скетч полностью

Komandir
Offline
Зарегистрирован: 18.08.2018

Хочу и могу часто не совпадают... Есть разные библиотеки. 600 светодиодов 8 бит на цвет - это 600*3=1800 байт 

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

но скетч то я переписать не смогу. Сможете помочь?

Komandir
Offline
Зарегистрирован: 18.08.2018

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

-NMi-
Offline
Зарегистрирован: 20.08.2018

Ничо там ниглючит и стэк там нафик ниупал. Делашь процедуру на асме, пихаш ей два параметра: указатель и количество. Формируешь в озу цветовую картинку и скармливаешь её процедуре. Там фсё просто: берём по указателю 3 байта и скармливаем светодиодам и так далее до конца. Процедурка не более 100 команд проца.

Фпринципе если зарезервировать под стэк 100 байтов, то палучицца кол-во светодиодов = память - 2*100. Так-шо 600 нипридел для 2048.

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

слюшай, сможешь помочь переписать скетч(тут просто переключение эффектов кнопкой, и эффекты норм такие)

Komandir
Offline
Зарегистрирован: 18.08.2018

Вот эффекты + диоды и жрут память ! Вывод данных на ленту думаю там сделан нормально.

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

к слову замена инт на байт не работает, лента не горит

RxMaxx
Offline
Зарегистрирован: 10.04.2020
byte fav_modes[] = {2, 3, 4, 6, 11, 19, 22, 30, 33, 35, 37, 39, 101};  // список "любимых" режимов
byte num_modes = sizeof(fav_modes);         // получить количество "любимых" режимов (они все по 1 байту..)

Этот массив не меняется, замените его на const, и num_modes - тоже известен, замените на define.

P.S. Код по правилам форума оформите...

 

RxMaxx
Offline
Зарегистрирован: 10.04.2020
del
Komandir
Offline
Зарегистрирован: 18.08.2018

Это сразу было понятно ...

Верните как было и перебором узнайте при каком числе нормально компилируется и нормально работает !

Потом уже будем думать что и как...

RxMaxx
Offline
Зарегистрирован: 10.04.2020

MCGeorge2k пишет:

к слову замена инт на байт не работает, лента не горит

Не все int меняйте, а те, что можно, те что в пределах от 0 до 255

-NMi-
Offline
Зарегистрирован: 20.08.2018

RxMaxx пишет:

 те что в пределах от 0 до 255

думаю, шо тс и знать-низнат о чём ты талкуешь)))

аваще код гавно. нахер там сериал? фавориты и массивы можно в прогмем отослать... ну и далее по рыхлому)))))))))))))))))))))))))))))))))))))))))))))))))))

Komandir
Offline
Зарегистрирован: 18.08.2018

Serial там для смены режима через терминал - можно выкусить и кусок кода где проверяется есть ли что в порту и если есть - сменить режим. Буфер Serial занимает много памяти !

b707
Онлайн
Зарегистрирован: 26.05.2017

имхо, пока код не выложит правильно - ничего больше не отвечать

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:

имхо, пока код не выложит правильно - ничего больше не отвечать

И не просто "правильно" - а еще и в нужном разделе.

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020
/*
  Скетч создан на основе 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 600          // число светодиодов в кольце/ленте
#define LED_DT 13             // пин, куда подключен DIN ленты

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

byte fav_modes[] = {3, 6, 11, 22, 30, 38, 101};  // список "любимых" режимов
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;

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);
  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 > 500) {     // каждые полсекунды
      last_bright = millis();               // сброить таймер
      new_bright = map(analogRead(6), 1, 1000, 3, max_bright);   // считать показания с фоторезистора, перевести диапазон
      LEDS.setBrightness(new_bright);        // установить новую яркость
    }
  }

  /*
    if (//Serial.available() > 0) {     // если что то прислали
      ledMode = //Serial.parseInt();    // парсим в тип данных int
      change_mode(ledMode);           // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
    }
  */
  switch (ledMode) {
    case  3: rainbow_loop(); break;            // крутящаяся радуга
    case  6: color_bounceFADE(); break;        // бегающий паровозик светодиодов
    case 11: pulse_one_color_all_rev(); break; // пульсация со сменой цветов
    case 22: flame(); break;                   // эффект пламени
    case 30: new_rainbow_loop(); break;        // крутая плавная вращающаяся радуга
    case 38: Sparkle(0xff, 0xff, 0xff, thisdelay); break;                           // случайные вспышки белого цвета
    case 101: one_color_all(255, 0, 0); LEDS.show(); break; //---ALL RED
  }
}

void btnISR() {
  if (millis() - btnTimer > 150) {
    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 3: thisdelay = 20; thisstep = 10; break;       //---RAINBOW LOOP
    case 6: thisdelay = 80; thishue = 0; break;         //---CYLON v2
    case 11: thisdelay = 30; thishue = 0; break;        //---PULSE COLOR SATURATION
    //---PLACEHOLDER FOR FLAME VARS
    case 30: thisdelay = 15; break;                      //---NEW RAINBOW LOOP
    case 38: thisdelay = 0; break;                      // Sparkle
    case 101: one_color_all(255, 0, 0); LEDS.show(); break; //---ALL RED
  }
  bouncedirection = 0;
  one_color_all(0, 0, 0);
  ledMode = newmode;
}

 

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

Подредачил код. Работают все нужные режимы, НО не работает заполнение одним цветом

Вот такой кейс на выполнение заполнения одним цветом был изначально в коде. Я его добавил в избранное для переключения кнопкой, но когда очередь доходит до него, ардуино зависает. В чем проблема?

"case 101: one_color_all(255, 0, 0); LEDS.show(); break; //---ALL RED"

 

П. С. Только что вырезал все режимы кроме этого заполнения, и оно заработало, дело в памяти? 

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

выложил, подскажешь один момент пж?

b707
Онлайн
Зарегистрирован: 26.05.2017

плата ардуино какая?

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

arduino nano

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

скорее всего что то не так с этим кейсом, ибо без него всё работает, и переключает, а когда я добавляю его, то она зависает, когда доходит очередь до этого режима

b707
Онлайн
Зарегистрирован: 26.05.2017

MCGeorge2k пишет:

arduino nano

не смешно.

В Нано 2048 байт памяти, а тут только массив в строке 42 занимает 3600 байт. Это не считая всех остальных переменных.

Я смотрю, вы не выполнили ни одной рекомендации по сокращению размера данных. что вам давали выше...

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

но он же не выполняеться. Как мне его убрать?

b707
Онлайн
Зарегистрирован: 26.05.2017

MCGeorge2k пишет:

но он же не выполняеться. Как мне его убрать?

блин, вам уже несколько человек сказали - не будет 600 диодов работать в этом скетче. Уменяьшайте число диодов либо берите ардуину "толще"

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

подскажите плс, какую лучше взять? гуглил, не нашел

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

и кстати, если в теории заставить в этом скетче работать диоды через один белым, то получиться?. Не могли бы помочь написать код для такого варианта, потому что я не силён.)

b707
Онлайн
Зарегистрирован: 26.05.2017

MCGeorge2k пишет:

и кстати, если в теории заставить в этом скетче работать диоды через один белым, то получиться?.

этот скетч для этого не подходит. Нужно писать работу с диодами без библиотеки.

А с библиотекой (любой) - 600 диодов в Нано не влезут.

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

подскажете как написать/где найти инфу пожалуйста?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Включаем логику (в голове) -> рисуем схему с пониманием что и когда и как делается -> пишем всю схему в виде кода. 

MCGeorge2k
Offline
Зарегистрирован: 31.05.2020

легко говорить человеку, который понимает с)

b707
Онлайн
Зарегистрирован: 26.05.2017

MCGeorge2k пишет:

легко говорить человеку, который понимает с)

так в том-то и проблема, дружище.

Что в этой ситуации можно тебе обьяснить, если ты даже int на byte не осилил исправить в простенькой программе?

-NMi-
Offline
Зарегистрирован: 20.08.2018

b707 пишет:

 берите ардуину "толще"

Склеить наноклеем две наны и будет 2048*2=4096 байт памяти. На 600 светиков хватит.

Komandir
Offline
Зарегистрирован: 18.08.2018

-NMi- второй массив не используется нигде и компилятор его аннигилирует ... так что 600 диодов должно работать при правильном написании кода.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Komandir пишет:

компилятор его аннигилирует ... так что 600 диодов должно работать при правильном написании кода.

анифига! Это если`б униво светодиоды были {3*byte} то всё харашо, а у ниго {3*int}   ,,,  так-шо 600 никатит! Клей нужен.

Komandir
Offline
Зарегистрирован: 18.08.2018

Я не знаю какую версию библиотеки он использует - не думаю что в самой библиотеке такой косяк !

b707
Онлайн
Зарегистрирован: 26.05.2017

Komandir пишет:

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

так там даже первый массив (строка 41) уже 1800 байт. А сколько у него еще в коде наворочено?

В общем, 600 ледов впихнуть можно, но только совсем на пределе. И желательно вообще без эффектов :)

Komandir
Offline
Зарегистрирован: 18.08.2018

Если писать с умом и следить за глубиной вызовов, то можно и эффекты запустить.

b707
Онлайн
Зарегистрирован: 26.05.2017

Komandir пишет:

Если писать с умом и следить за глубиной вызовов, то можно и эффекты запустить.

охотно верю.

но я бы "блюпилл" взял :) - дешевле и памяти в 10 раз больше

Komandir
Offline
Зарегистрирован: 18.08.2018

ТС осилит ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Komandir пишет:

ТС осилит ?

В Нану точно не осилит.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Komandir пишет:

Если писать с умом и следить за глубиной вызовов...

Могу посоветовать только одно - резче, чаще, глубже!!!  Эффэкт потрясающий!