Hello I need some help working through some logic here. This is mainly to do with arrays (I think!). The gist of it is that I want to test this out on my short strip with 23 leds (ws2811), but I may want to use a longer strip using this code in the future. Basically I wanna just be able to swap numbers in array when I need to use this code again.
I want even number leds in array to play RGB (204, 12, 156) and odd ones to play RGB (110, 231, 58). Further more I want the loop to run 3 times and I want the leds to fade out.
Now I’m aware that you can declare variables in array like this:
int exampleArray[3];
exampleArray[0]= 10;
exampleArray[1]= 12;
exampleArray[2]= 21;
However as you know this becomes problematic if your array is larger (can you imagine having to do this 200 times?)
Because I want to call up even and odd number leds, instead of doing all that declaration I thought maybe I could use if ((leds % 2)== 0) for the even number and else for the odd?
I have not tried to compile this yet as I’m 100% sure there is something wrong with my logic.
Here is my code thus far:
/*this program will play even numbers of leds in an array as
(204, 12, 156) and odd numbers as (110, 231, 58). Loop will repeat 3 times then go to a rainbow */
#include <FastLED.h>
#define PIN 4
#define NUM_LEDS 23 //my strip has 23 leds total
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
int fadeAmount = 8;
int brightness = 0;
CRGB leds[NUM_LEDS]; //this is the array of leds
void setup() {
delay(1000); //1000 millisecond delay
FastLED.addLeds<LED_TYPE, LED_DT, COLOR_ORDER> (leds, NUM_LEDS);
}
void loop() {
for (int i; i<3; i++) //loop runs 3 times
{
if ((leds % 2)== 0)
{
leds[i].setRGB (204, 12, 156); //even numbers play this color
leds[i].fadeLightBy(brightness);
} else{
leds.setRGB (110, 231, 58); //odd numbers play this color
leds[i].fadeLightBy(brightness);
}
if(brightness == 0 || brightness == 255)
{
fadeAmount = -fadeAmount ;
}
//fill rainbow loop
for (int i=0; i<4;i++){//loop runs 4 times
fill_rainbow (leds, NUM_LEDS, 0, 12);
fastLED.show();
delay (40);
}
}