Несколько led колец, должны работать параллельно.
- Войдите на сайт для отправки комментариев
Ср, 23/03/2022 - 10:30
Есть 2 кольца, каждое из них имеет свои параметры:
1) размер (количество диодов)
2) начало направления движения (по часовой/против)
в дальнейшем будет 4 кольца. 2 больших 2 маленьких и все в разные стороны будут работать.
#include <Thread.h> #include <FastLED.h> Thread smallThread = Thread(); Thread bigThread = Thread(); #define NUM_LEDS_BIG_RINGS 39 CRGB big_leds[0][NUM_LEDS_BIG_RINGS]; #define NUM_LEDS_SMALL_RINGS 30 CRGB small_leds[0][NUM_LEDS_SMALL_RINGS]; void setup() { FastLED.addLeds<NEOPIXEL, D1>(big_leds[0], NUM_LEDS_BIG_RINGS); FastLED.addLeds<NEOPIXEL, D2>(small_leds[0], NUM_LEDS_SMALL_RINGS); smallThread.onRun(smallRings); smallThread.setInterval(20); bigThread.onRun(bigRings); bigThread.setInterval(20); } void fadeall() { for(int i = 0; i < NUM_LEDS_SMALL_RINGS; i++) { small_leds[0][i].nscale8(250); } for(int i = 0; i < NUM_LEDS_BIG_RINGS; i++) { big_leds[0][i].nscale8(250); } } void loop() { if (smallThread.shouldRun()){ smallThread.run(); } if (bigThread.shouldRun()){ bigThread.run(); } } void bigRings (){ static uint8_t hue = 0; for(int i = (NUM_LEDS_BIG_RINGS)-1; i >= 0; i--) { big_leds[0][i] = CHSV(hue++, 255, 255); FastLED.show(); fadeall(); delay(10); } for(int i = 0; i < NUM_LEDS_BIG_RINGS; i++) { big_leds[0][i] = CHSV(hue++, 255, 255); FastLED.show(); fadeall(); delay(10); } } void smallRings (){ static uint8_t hue = 0; for(int i = 0; i < NUM_LEDS_SMALL_RINGS; i++) { small_leds[0][i] = CHSV(hue++, 255, 255); FastLED.show(); fadeall(); delay(15); } for(int i = (NUM_LEDS_SMALL_RINGS)-1; i >= 0; i--) { small_leds[0][i] = CHSV(hue++, 255, 255); FastLED.show(); fadeall(); delay(15); } }
пытался сделать через потоки, но все равно for - идет последовательно
пытался сделать через потоки, но все равно for - идет последовательно
а где тут потоки?
И это не фор виноват, что "for - идет последовательно", а это вы его последовательно запускаете! Если вы, как в процедуре ниже - сначала пробегаете полностью одно кольцо, а потом другое - то как оно, по вашему, параллельно может быть??
Попробуйте зажигать диоды ПАРАЛЛЕЛЬНО в обоих кольцах... зажгли первый диод в одном кольце, потом первый во втором. Далее второй в первом кольце, второй во втором... и так далее. И никакие потоки не нужны для этого, только чуть мозгами подумать
Сделал в одном цикле, мелкое кольцо зажигается только в случае если I <= колличеству диодов. [NUM_LEDS_SMALL_RINGS - i] - задается направление
спасибо за наводку)