ESP, IoT Не работает delay() с библиотекой FastLED

Shain

✩✩✩✩✩✩✩
19 Янв 2021
16
0
Пытаюсь изучать FastLED используя RGB кольцо ws2812. Учу тут. Так вот, когда написал и загрузил код в свою NodeMCU ESP8266, всё работает, но без задержки, delay() просто игнорируется. FastLed.delay() тоже пробовал, результата ноль.
 

Shain

✩✩✩✩✩✩✩
19 Янв 2021
16
0
@Сотнег, я даже не понял, что я не понял...

C++:
#include <FastLED.h>
#define NUM_LEDS 24
#define DATA_PIN D2

CRGB leds[NUM_LEDS];

void setup() {
       FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
   }

void loop() {
        for(int i = 0; i < NUM_LEDS; i++) {
            leds[i] = CRGB::Blue;
            FastLED.show();
            leds[i] = CRGB::Black;
            delay(1000);
        }
    }
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,834
589
44
Скорее всего из-за того что ESP - это гораздо сложней, чем ардуина. На ней на сколько помнится крутится своя операционка (RTOS?) то delay в ней специально отключен, т.к. это блокирующая функция. А блокирующие функции для такой системы очень череваты.

Выход в такой ситуации - не использовать delay, а использовать например таймеры с калбэками. Да, это трудней в понимании и освоении, но зато решает проблему.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
и где конкретно там фигня?
Везде. Писать так как написано здесь и в примере - плохо. FastLED.show(); нужно вызывать не в коде формирующем кадр и уж точно не в середине действия.

Но FastLED писало один-два понимающих и сейчас походу таких вообще не осталось. Но вообще суть проблемы в том, что текущий master для ESP8266 тупо сломан и нужно использовать предыдущий релиз + предыдущий SDK, либо другой контроллер.
 
  • Лойс +1
Реакции: Shain

Shain

✩✩✩✩✩✩✩
19 Янв 2021
16
0
Проблема решена сменой версии библиотеки на 3.0.0, другие не пробовал. Всем спасибо!