Динамическая настройка.

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

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Взят штатный пример из комплекта библы WS2812FX. Скетч Serial_control. Работает. Понадобилось менять число засвечиваемых диодов по ходу работы программы.
    Ввел аналогично остальным команду управления длиной. " l xx ". Но здесь надо как-то перезапустить библиотеку.
    Код (C++):
    #include <WS2812FX.h>

    #define LED_COUNT 16
    #define LED_PIN 6
    #define MAX_NUM_CHARS 16 // maximum number of characters read from the Serial Monitor

    WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

    void setup() {
      Serial.begin(9600);
      ws2812fx.init();
      ws2812fx.setBrightness(127);
      ws2812fx.setSpeed(1000);
      ws2812fx.setColor(0x0000FF);
      ws2812fx.setMode(FX_MODE_STATIC);
      ws2812fx.start();
    }

    void loop() {
    ...
    }
    ...
    // Здесь попытка ввести изменение длины ленты
    void process_command() {

      if (strncmp(scmd,"l ",2) == 0) {  
        uint8_t l = (uint8_t)atoi(scmd + 2);
        ws2812fx.stop();                                //
    WS2812FX ws2812fx = WS2812FX(l, LED_PIN, NEO_GRB + NEO_KHZ800);
        ws2812fx.begin();
        ws2812fx.init();
        ws2812fx.setBrightness(127);
        ws2812fx.setSpeed(1000);
        ws2812fx.setColor(0x0000FF);
        ws2812fx.setMode(FX_MODE_STATIC);
        ws2812fx.start();
        Serial.print(F("Set strip length to: "));
        Serial.print(" - ");
        Serial.println(l);
      }
    }
     
    Пишет что команда прошла, на дальнейшие команды отвечает, но светодиоды не горят. Как сделать правильно ? С уважением.
     
    Последнее редактирование: 12 янв 2022
  2. akl

    akl Гуру

    там есть метод setLength() - может это как раз то что надо?
     
    Ariadna-on-Line нравится это.
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Спасибо. То что надо. Но вопрос остается - возможно ли в принципе перезапускать библиотеку.
     
  4. akl

    akl Гуру

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