#arduino
#arduino #arduino-c
Вопрос:
Я хочу 10 красных светодиодов и следующие 10 белых светодиодов, и это повторяется до тех пор, пока я не дойду до конца светодиодной цепочки.
Это худший код, но он работает.
Как правильно это сделать? Это должно быть очень просто, но я не могу понять это
void Brabant() {
for (int i = 0; i < NUM_LEDS; i = i 20) {
if (i < NUM_LEDS) {
leds[i] = CRGB::Red;
leds[i 1] = CRGB::Red;
leds[i 2] = CRGB::Red;
leds[i 3] = CRGB::Red;
leds[i 4] = CRGB::Red;
leds[i 5] = CRGB::Red;
leds[i 6] = CRGB::Red;
leds[i 7] = CRGB::Red;
leds[i 8] = CRGB::Red;
leds[i 9] = CRGB::Red;
FastLED.show();
}
}
for (int i = 10; i < NUM_LEDS; i = i 20) {
if (i < NUM_LEDS) {
leds[i] = CRGB::White;
leds[i 1] = CRGB::White;
leds[i 2] = CRGB::White;
leds[i 3] = CRGB::White;
leds[i 4] = CRGB::White;
leds[i 5] = CRGB::White;
leds[i 6] = CRGB::White;
leds[i 7] = CRGB::White;
leds[i 8] = CRGB::White;
leds[i 9] = CRGB::White;
FastLED.show();
}
}
}
Ответ №1:
Вы могли бы заменить:
leds[i] = CRGB::White;
leds[i 1] = CRGB::White;
leds[i 2] = CRGB::White;
leds[i 3] = CRGB::White;
leds[i 4] = CRGB::White;
leds[i 5] = CRGB::White;
leds[i 6] = CRGB::White;
leds[i 7] = CRGB::White;
leds[i 8] = CRGB::White;
leds[i 9] = CRGB::White;
с:
for (int j = 0; j < 10; j ) {
leds[i j] = CRGB::White;
}
Кроме того, вам нужно изменить свой i < NUM_LEDS
на что-то более безопасное; цикл после него может выходить на 10 светодиодов дальше i
и, следовательно, дальше NUM_LEDS
.
Ответ №2:
Вы могли бы использовать что-то вроде этого (все еще не «хорошо выглядящий, но, возможно, немного лучше)
for (int i = 0; i < NUM_LEDS; i = i 20) {
if (i < NUM_LEDS) {
for (int a = 0; a < 10; a ) {
leds[i a] = CRGB::Red;
}
FastLED.show();
}
}
for (int i = 10; i < NUM_LEDS; i = i 20) {
if (i < NUM_LEDS) {
for (int a = 0; a < 10; a ) {
leds[i a] = CRGB::White;
}
FastLED.show();
}
}
Убедитесь, что светодиоды [i a] никогда не становятся больше длины массива светодиодов
Может быть, что-то подобное тоже сработает (но не уверен, я не знаю библиотеку FastLED)
for (int i = 0; i < (NUM_LEDS-20); i = i 20) { //(NUM_LEDS-20) so that i a 10 never gets bigger than NUM_LEDS
if (i < NUM_LEDS) {
for (int a = 0; a < 10; a ) {
leds[i a] = CRGB::Red;
leds[i a 10] = CRGB::White;
}
FastLED.show();
}
}