FastLED + Arduino Leonardo. Проблемы с отображением ленты
- Войдите на сайт для отправки комментариев
Чт, 30/12/2021 - 16:27
Всем привет! Короче говоря, есть 2 ленты на чипе WS2812B, наклеенные по периметру комнаты. Написал алгоритм, который заполняет одним цветом эти 2 ленты по каждой стороне стены, однако он работает как-то криво, и я не понимаю почему. Вот код
#include <FastLED.h> // How many leds in your strip? #define NUM_LEDS 210 // How many leds in little and in big side of the room? #define litSideNumLeds 96 // +1 because in array element less on 1 #define bigSideNumLeds 114 void setup(){ delay( 3000 ); // power-up safety delay FastLED.addLeds<WS2812,DATA_PIN,RGB>(tvSideLeds,NUM_LEDS); FastLED.addLeds<WS2812,DATA_PIN1,RGB>(bedSideLeds,NUM_LEDS); FastLED.setBrightness( BRIGHTNESS ); } void loop(){ for(int i = 0; i < (NUM_LEDS - 96); i++){ tvSideLeds[i] = CRGB::Green; // fill one wall with led strip if(i<96){tvSideLeds[bigSideNumLeds + i] = CRGB::Green; }//fill another wall with led strip static int ist = 0; for(int n = (NUM_LEDS-1); n >= 0; n--){ // copy one(tvSideLeds) led strip to antoher(bedSideStrip) bedSideLeds[n] = tvSideLeds[ist]; ist++; } FastLED.show(); } }
, где tvSideLeds - массив первого отрезка ленты, bedSideLeds - массив второго отрезка ленты. А litSideNumLeds и bigSideNumLeds - это длины меньшей и большей стен в дидоах. Вообще я хотел просто зеркалить происходящее на одной ленте на другую ленту. Но в реальности так не получилось. Лента, на которую копирую, заполняется не цветом оригинала, а белым, с периодически увеличиваемой яркостью. Вот.
UPD: Не совсем правильный код был. Вот правильный:
Спасибо всем, я решил свою проблему. Но если кто-то может, объясните почему код выше не работает.
К слову, вот рабочий код:
static int ist улетает в небо, унося за собой tvSideLeds[ist]
в #2 4 строка - до каких границ выполняется цикл ? Вы уверены что есть элементы массивов с номерами больше чем 96 и 114 ???
В 4 строке массив одного отрезка ленты копируется в массив второго отрезка ленты, поэтому ограничивается максимальным количеством светодиодов на обоих отрезках. А второй вопрос не совсем понял. Массивы могут быть больше 114 элементов. А если в физическом плане, то да, ведь всего диодов 210.
Понял. Но разве каждую итерацию первого for() ist не будет обнуляться? Или надо самостоятельно её обнулять(типа static int ist = 0; ist = 0;)?
Понял. Но разве каждую итерацию первого for() ist не будет обнуляться? Или надо самостоятельно её обнулять(типа static int ist = 0; ist = 0;)?
может возьмете учебник и прочитаете, как работает static?
Привыкайте искать информацию сами
Если NUM_LEDS 210, то в цикле for(int n = 0; n < NUM_LEDS; n++) n будет меняться от 0 до 209. При этом bedSideLeds[209] существует ??? Куда по вашему запишутся данные, которые "не помещаются" в массив ???