Dat kan zeker, kost even wat prullen, maar uit eindelijk is het makkelijk (ik ga er vanuit dat je dit artikel door gekeken hebt).
Stel je hebt een loop (for ... next) waarin je alle kleuren instelt (NeoPixel als voorbeeld):
for(int i=0; i<NUM_LEDS; i++) {
strip.setPixelColor(i, strip.Color(0xff, 0xff, 0xff)); // zet alles op WIT
}
We kunnen deze loop aanpassen zodat het bij even nummers, de LED op blauw zet, en bij oneven nummers op wit.
Daarbij gebruiken we een kleine handige reken truuk.
Modulo is de deel rest van een deling. Dus een even getal gedeeld door 2 geeft altijd een modulo van nul. Het module teken is "%" in Arduino (C) berekeningen, dus 2 % 2 levert een module (of deelrest) van nul, maar 3 % 2 levert een modulo van 1, 4 % 2 levert een modulo van nul, 5 % 2 levert een module 1, etc etc.
Dus simpel gezegd:
if ( (i % 2) == 0) {
// doe iets voor even nummers
} else {
// doe iets voor oneven nummers
}
Dus de voorbeeld code zou kunnen zijn (waarbij NUM_LEDS het aantal LEDs is):
for(int i=0; i<NUM_LEDS; i++) {
if ( (i % 2) == 0) {
strip.setPixelColor(i, strip.Color(0x00, 0x00, 0xff)); // zet alles op BLAUW
} else {
strip.setPixelColor(i, strip.Color(0xff, 0xff, 0xff)); // zet alles op WIT
}
}
Omdat nul hetzelfde is als FALSE, zouden we een klein beetje kunnen inkorten naar het volgende.
Let wel op dat nu blauw en wit omgewisseld zijn, omdat een even nummer nul levert dus FALSE is en de IF dus faalt en doorgaat naar de ELSE.
for(int i=0; i<NUM_LEDS; i++) {
if ( i % 2 ) {
strip.setPixelColor(i, strip.Color(0xff, 0xff, 0x00)); // zet alles op WIT
} else {
strip.setPixelColor(i, strip.Color(0x00, 0x00, 0xff)); // zet alles op BLAUW
}
}
Niet super zinvol, maar leuk om te weten misschien.
Ik heb overigens de kleur waarden in hexadecimaal opgegeven, maar dat kan ook met decimale getallen ( 0xff = 255 ).
De variant voor FastLED is:
for(int i=0; i<NUM_LEDS; i++) {
if ( (i % 2) == 0) {
leds.r:=0xff; // WIT
leds.g:=0xff;
leds.b:=0xff;
} else {
leds.r:=0; // BLAUW
leds.g:=0;
leds.b:=0xff;
}
}
Hopelijk helpt dit je op weg en hopelijk heb ik geen type fouten gemaakt