Включите светодиоды один за другим
Я пытаюсь включить светодиоды один за другим, чтобы начать с одного конца и медленно поворачивать светодиоды, пока они не достигнут середины полосы. Код работает с конца светодиодной ленты, но не с начала ленты. От начала полосы просто включаются все светодиоды до середины.
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);
}
@David, 👍0
Обсуждение1 ответ
Лучший ответ:
Хорошо, я понял. Проблема в том, что цикл 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
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Светодиод L продолжает гореть
- Улучшенное циклическое переключение цветов RGB.
- Плавное мигание светодиодов
- Остановить мигание светодиодов
- FastLED - Как управлять определенными светодиодами
с какого числа теперь начинается цикл for? .... измените его так, чтобы он считался в противоположном направлении, @jsotola
Ооо, я только что подумал о том, как
l
увеличивается в цикле, а не уменьшается. Я решил это, изменив его наfor(int l = j; l <midpoint & l> -1; l--)
, @DavidЕсли вы решили это, вы можете опубликовать ответ на свой вопрос. Если вы этого не сделаете, вопрос останется здесь без ответа., @Nick Gammon
Вы должны исправить свой отступ. Очень сложно сказать, какой код находится внутри внешнего цикла
j
, так как часть этого кода не имеет отступа., @Duncan CВам нужно добавить больше пояснений. Какой фреймворк вы используете и как массив
leds
связан с вашей функциейFastLED.show()
. Показывает ли он светодиоды, которые находятся в вашем массиве «светодиодов»? Что снова выключает светодиоды?, @Duncan C