Старый добрый fastled - можно ли залить всю ленту одним цветом за одну итерацию loop?

Тема в разделе "Arduino & Shields", создана пользователем Gomez, 12 ноя 2022.

  1. Gomez

    Gomez Гик

    Хорошо известная библиотека FastLed для тех, кто любит разноцветные огоньки. :)
    Вот у меня разные режимы и яркость, всё регулируется энкодером.
    Всё хорошо, но захотелось сделать запись в EEPROM текущей яркости по длинному нажатию на ручку энкодера. И тут всё хорошо, но зазотелось на секунду моргнуть зелёным светом всей лентой в качестве индикации "Сделано, в EEPROM письнули".
    Хотел тупо в функции написать типа
    Код (C++):
        EEPROM.write(eepaddress, max_bright);
        EEPROM.commit();

        fill_solid(leds, NUM_LEDS, CRGB::Green);
        FastLED.show();
        delay(1000);
    delay - моветон, но ведь мне не нужно, чтобы во время этого мигания что-то ещё заполнялось, а так подумал, что delay остановит текущий режим мигания лентой и секунду повисит зеленая лента.

    А вот фигвам - мигает один светодиод (видимо, fill_solid тоже в цикле loop по одному зажигает по одному светодиоды) и всё. Но, что характерно, если нажать и удержать ручку энкодера ещё раз (если не менять до этого яркость), то всё сработает, как положено.
    Вот этого поведения не понимаю. :(
     
  2. Asper Daffy

    Asper Daffy Иксперд

    Нет, конечно.

    fill_solid - очень простая функция (кто Вам мешает посмотреть на неё?), вот она:
    Код (C++):
    void fill_solid( struct CRGB * leds, int numToFill, const struct CRGB& color)
    {
        for( int i = 0; i < numToFill; i++) {
            leds[i] = color;
        }
    }
     
    Если параметры переданы правильно, то она выгрузит весь массив.

    Проблема в параметрах или в чём-то ещё. Нужен предметный разговор, подготовьте маленький, но полный (чтобы можно было запустить) пример, иллюстрирующий проблему.