Взят штатный пример из комплекта библы 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); } } Пишет что команда прошла, на дальнейшие команды отвечает, но светодиоды не горят. Как сделать правильно ? С уважением.
теоретически наверно можно, но наверно надо создавать класс то есть экземпляр оного не глобальным, или уничтожать его перед тем как создавать другой. но я в этом не шарю, тем более что этот ардуиновский класс может ваще не заточен под такое пересоздание