плавный сдвиг трёх светодиодов на адресной ленте
- Войдите на сайт для отправки комментариев
Вс, 02/05/2021 - 12:28
Добрый день! Прошу помощи разобраться с переполнение стека. Плата ESP8266. Скетч перемещает по адресной ленте три светодиода вправо на 10 позиций. Во время выполнения происходит переполнение стека. Так же почему то светодиоды с leds[].fadeLightBy(255) не гаснут полностью, а еле светятся разным цветом. Буду благодарен, если подскажите иной способ реализации (не через .fadeLightBy).
#include <FastLED.h> #define NUM_LEDS 50 #define LED_PIN 2 #define CLOCK_PIN 13 CRGB leds[NUM_LEDS]; // Define the array of leds #define COLOR_ORDER RGB #define CHIPSET WS2811 int flag =1; void setup() { FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalSMD5050); Serial.begin(9600); Clear (); // гасим все светодиоды FastLED.show(); } void loop() { if (flag ==1){ Run(); } } void Clear () { for(int i = 0; i < NUM_LEDS; i++ ) { leds[i] = CRGB::Black; } } void Run() { Dot(); //плавно зажигаем три точки int br=255; for (int a=1; a != 10; a++){ //сдвигаем три точки вправо пока центр не станет = 10 for (int i=1; i<255; i++){ leds[a-1] = CRGB::White; leds[a-1].fadeLightBy(i); //плавно гасим левую от target точку leds[a+2] = CRGB::White; leds[a+2].fadeLightBy(br); //плавно зажигаем вторую справа от target точку FastLED.show(); br--; } } flag = 2; } void Dot () { for (int br = 255; br >= 0; br--){ for (int i = 0; i < 3; i++){ leds[i] = CRGB::White; leds[i].fadeLightBy(br); } FastLED.show(); } flag = 2; }
Продолжительность процесса вообще нигде не контролируется. Нет смысла чинить фундаментально нерабочий код.
Смысл скетча следующий: имеется темный коридор, проход контролирует сенсор VL53L1X. На потолке вдоль коридора параллельно соединенные адресные ленты. Когда появляется движение, над ним зажигается пятно и следует за передвижением. Вот этот фрагмент - попытка плавно сдвинуть пятно.
Или хотя бы подскажите как реализовать именно плавный белый бегущий огонь на адресной ленте, через leds[].fadeLightBy() как то не очень получается...
Так если ты даже такую чепуху ни сам написать, ни с либки зацепить не можно - это же чем тебе поможет?! Безнадега. Ну глянь тут http://arduino.ru/forum/proekty/pokhvalimsya-khudozhestvennoi-samodeyatelnostyu-na-ws2812 И бегают и блымают. Но видно не для тебя это
Я вообще-то помощи попросил, по скетчу разве не видно, что уровень 0+? Это для тебя чепуха, а я только познаю. Первые шаги всегда сложные, много не понятного, потому и написал, что не получается... А тут сразу- безнадёга...
Может быть, для первых шагов нужно выбрать что-нибудь попроще?
Что такое "плавный сдвиг"? Я вот из приведенного кода абсолютно ничего не понял.
Человек пытается управлять каждым светодиодом по отдельности.
Горят три светодиода, крайний левый начинает медленно гаснуть, справа от этих трёх начинает медленно зажигаться. Происходит смещение с фейдом. Можно сказать бегущие огни из трёх светодиодов с плавным угасанием хвоста и плавным зажиганием головы.
Как делаются мультфильмы знаете? Ряд быстро сменяемых статичных кадров создают впечатление движения. Кто вам не дает сделать так же?
Здесь для наглядности, каждая цифра - светодиод, значение - условное значение яркости, 0 - светодиод погашен, 3 - светодиод горит максимальной яркостью, промежуточные значения - соответственно, промежуточная яркость. В итоге вы получите бегущий огонь с плавных розжигом впереди и плавным угасанием сзади
Как-то так. Ошибки округления больно большие получаются, но тут уж что поделаешь с авр.