Включите светодиоды один за другим

led

Я пытаюсь включить светодиоды один за другим, чтобы начать с одного конца и медленно поворачивать светодиоды, пока они не достигнут середины полосы. Код работает с конца светодиодной ленты, но не с начала ленты. От начала полосы просто включаются все светодиоды до середины.

int midpoint = 30;
int R = 255;
int G = 0;
int B = 0;
for(int j = 0; j<midpoint; j++){
     //начиная с конца, заполняя к середине
        for(int k = NUM_LEDS-j; k < NUM_LEDS; k++){
           leds[k] = CRGB (R, G, B);
        }
//в промежутке здесь есть какой-то другой код
FastLED.show();
delay(20);
     //начиная с начала, заполняя к середине
     //это часть кода, которая работает некорректно
        for(int l = j - 1; l < midpoint; l++){
           leds[l] = CRGB (R, G, B);
           }
//больше промежуточного кода
FastLED.show();
delay(20);
}

, 👍0

Обсуждение

с какого числа теперь начинается цикл for? .... измените его так, чтобы он считался в противоположном направлении, @jsotola

Ооо, я только что подумал о том, как l увеличивается в цикле, а не уменьшается. Я решил это, изменив его на for(int l = j; l <midpoint & l> -1; l--), @David

Если вы решили это, вы можете опубликовать ответ на свой вопрос. Если вы этого не сделаете, вопрос останется здесь без ответа., @Nick Gammon

Вы должны исправить свой отступ. Очень сложно сказать, какой код находится внутри внешнего цикла j, так как часть этого кода не имеет отступа., @Duncan C

Вам нужно добавить больше пояснений. Какой фреймворк вы используете и как массив leds связан с вашей функцией FastLED.show(). Показывает ли он светодиоды, которые находятся в вашем массиве «светодиодов»? Что снова выключает светодиоды?, @Duncan C


1 ответ


Лучший ответ:

2

Хорошо, я понял. Проблема в том, что цикл for начинается с 0 и продолжается до середины. Я хотел, чтобы он зажег все светодиоды, которые находятся в j и ниже. Поэтому я изменил его, чтобы итерировать вниз, а не вверх. Вот новый цикл:

for(int l = j; l < midpoint & l > -1; l--){
   leds[l] = CRGB (R, G, B);
}

Дополнительный квалификатор l > -1, чтобы убедиться, что он не пытается опуститься ниже светодиодов[0]

,

l >= 0 более естественен, чем l > -1, компилятор, вероятно, оптимизирует его для того же самого., @Code Gorilla

+1 за то, что нашли время опубликовать решение вашей проблемы. Большинство новых членов этого не делают., @Duncan C