Fading 6 LEDs in sequence, with a caveat

Working on a small project and am having a brain fart. I have 6 LED strands each on its own PWM channel. Everything in the attached code works as expected, however I want to make a change so that when it is "fade" mode, each strand will have a different brightness, and there will never be a point where more than 1 strand at a time is at 0 - basically a random wave pattern that never sees 0 on more than one leg. The two ways I see doing this are either adding timer or brightness variables to each strand, and either way i feel like I am taking the long way around the barn...

//Button Definitiions
  #define Button1 2 //star button
  byte ButtonPresses1 = 0;  //variable - how many times the button has been pressed
  byte Cycle1 = 0;  //variable - determines fade, off or on constant
  
//Timer Definitions
unsigned long Interval1 = 300; //interval for change
unsigned long PrevMil = 0;  //Variable - time

//Star Definitions
  int FadeAmount = 5;  //variable - fade step
  int Brightness = 0;  //variable - brightness step
  int MaxBrightness = 0;  //variable - maximum brightness level
  #define s1 3  //star strand 1
  #define s2 5  //star strand 2
  #define s3 6  //star strand 3
  #define s4 9  //star strand 4
  #define s5 10  //star strand 5
  #define s6 11  //star strand 6


void setup() {
//Debugging
  Serial.begin(9600);
  
//button setup
  pinMode(Button1, INPUT);  //sets button pin as input
  digitalWrite(Button1, HIGH);  //sets pull-up resistor

//star setup
  pinMode(s1, OUTPUT);  //sets star pin as output
  pinMode(s2, OUTPUT);  //sets star pin as output
  pinMode(s3, OUTPUT);  //sets star pin as output
  pinMode(s4, OUTPUT);  //sets star pin as output
  pinMode(s5, OUTPUT);  //sets star pin as output
  pinMode(s6, OUTPUT);  //sets star pin as output

}

void loop() {
//Timer setup
  unsigned long CurMil = millis();  //grabs the current time
    
//button control
  if (digitalRead(Button1) == LOW)  //Check if button is pressed
  {
    ButtonPresses1++;  //adds to the button count
    delay(250);  //debounce control
  }
  if (ButtonPresses1 == 0 || ButtonPresses1 == 6) {
    ButtonPresses1 = 0;  //resets button count and cycle on 5th press
    Cycle1 = 0; 
  }
  if (ButtonPresses1 == 1) {
    MaxBrightness = 65;  //sets max brightness to 25% and cycle on press 1
    Cycle1 = 1;
  }
  if (ButtonPresses1 == 2) {
    MaxBrightness = 135;  //sets max brightness to 50% and cycle on press 2
    Cycle1 = 1;
    }
  if (ButtonPresses1 == 3) {
    MaxBrightness = 195;  //sets max brightness to 75% and cycle on press 3  
    Cycle1 = 1;
  }
  if (ButtonPresses1 == 4) {
    MaxBrightness = 255;  //sets max brightness to 100% and cycle on press 4  
    Cycle1 = 1;
  }
  if (ButtonPresses1 == 5) {
    Cycle1 = 2;  //sets cycle for full on on press 5
  }
  
//star control  
  //cycle control - 0 is all off, 1 is fading, 2 is all on
  switch (Cycle1) { 
    case 0: //All stars off
      analogWrite(s1, 0);
      analogWrite(s2, 0);
      analogWrite(s3, 0);
      analogWrite(s4, 0);
      analogWrite(s5, 0);
      analogWrite(s6, 0);
    break;
    case 1:  //stars fading
      if ((unsigned long)(CurMil - PrevMil) >= Interval1) {
        PrevMil = millis();
      if (Brightness > MaxBrightness) {
        Brightness = MaxBrightness;
      }
      analogWrite(s1, Brightness);
      analogWrite(s2, Brightness);
      analogWrite(s3, Brightness);
      analogWrite(s4, Brightness);
      analogWrite(s5, Brightness);
      analogWrite(s6, Brightness);
 
    //brightness stepping
      Brightness = Brightness + FadeAmount;

    //brightness reversal
      if (Brightness <= 0 || Brightness >= MaxBrightness) {
      FadeAmount = -FadeAmount;
      }  }
    break;
    case 2:  //All stars on
      analogWrite(s1, 255);
      analogWrite(s2, 255);
      analogWrite(s3, 255);
      analogWrite(s4, 255);
      analogWrite(s5, 255);
      analogWrite(s6, 255);
      break;
  }

//debugging
Serial.print ("Brightness =");
Serial.println(Brightness, DEC);
Serial.print ("Fade Amount =");
Serial.println(FadeAmount, DEC);
Serial.print ("Button Press =");
Serial.println(ButtonPresses1, DEC);
Serial.print("Max Brightness =");
Serial.println(MaxBrightness, DEC);
Serial.print("Cycle =");
Serial.println(Cycle1, DEC);
}

Thoughts?
t

Could you just create a flag using an if statement to say if fade1-6 = 0 flag high, then no others can be 0? That is kinda a brute force method though, could be cleaner I bet.

Try this... Put all the Brightness and FadeAmount plus Strand Pins in arrays to optimize code. Start each Brightness level at a different place equally spaced by maximum bright setting and treat each strand separate with loops. You might also consider moving the cycle 0 and 2 cases to the if statements so they don't repeat with each loop. Then you would only need an if block instead of a switch block and do the fades only if in a Cycle mode. Put the IF conditions inside the Button Pressed block and added a wait on button release so the if conditions only happen once with each press. I attempted the changes I suggested so you could see what I meant. I will leave you to test the code.

//Button Definitiions
#define Button1 2 //star button
byte ButtonPresses1 = 0;  //variable - how many times the button has been pressed
byte Cycle1 = 0;  //variable - determines fade, off or on constant

//Timer Definitions
unsigned long Interval1 = 300; //interval for change
unsigned long PrevMil = 0;  //Variable - time

//Star Definitions
int FadeAmount[6] = {5, 5, 5, 5, 5, 5}; //variable - fade step
int Brightness[6] = {0, 50, 100, 150, 200, 255}; //variable - starting brightness array for each strand
int MaxBrightness = 0;  //variable - maximum brightness level
int Strands[6] = {3, 5, 6, 9, 10, 11}; // variable strand pins

char debugLine[50];

void setup() {
  //Debugging
  Serial.begin(9600);

  //button setup
  pinMode(Button1, INPUT);  //sets button pin as input
  digitalWrite(Button1, HIGH);  //sets pull-up resistor

  //star setup
  pinMode(s1, OUTPUT);  //sets star pin as output
  pinMode(s2, OUTPUT);  //sets star pin as output
  pinMode(s3, OUTPUT);  //sets star pin as output
  pinMode(s4, OUTPUT);  //sets star pin as output
  pinMode(s5, OUTPUT);  //sets star pin as output
  pinMode(s6, OUTPUT);  //sets star pin as output

}

void loop() {
  //Timer setup
  unsigned long CurMil = millis();  //grabs the current time

  //button control
  if (digitalRead(Button1) == LOW)  //Check if button is pressed
  {
    ButtonPresses1++;  //adds to the button count
    delay(250);  //debounce control
    if (ButtonPresses1 == 0 || ButtonPresses1 == 6) {
      ButtonPresses1 = 0;  //resets button count and cycle on 5th press
      Cycle1 = 0; //sets cycle off

    }
    if (ButtonPresses1 == 1) {
      MaxBrightness = 65;  //sets max brightness to 25% and cycle on press 1
      int i = 0;
      int Bright = 0;
      for (i = 0; i < 6; ++i, Bright += (MaxBrightness / 5)) {
        Brightness[i] = Bright;
      }
      Cycle1 = 1;
    }
    if (ButtonPresses1 == 2) {
      MaxBrightness = 135;  //sets max brightness to 50% and cycle on press 2
      int i = 0;
      int Bright = 0;
      for (i = 0; i < 6; ++i, Bright += (MaxBrightness / 5)) {
        Brightness[i] = Bright;
      }
      Cycle1 = 1;
    }
    if (ButtonPresses1 == 3) {
      int i = 0;
      int Bright = 0;
      for (i = 0; i < 6; ++i, Bright += (MaxBrightness / 5)) {
        Brightness[i] = Bright;
      }
      Cycle1 = 1;
    }
    if (ButtonPresses1 == 4) {
      MaxBrightness = 255;  //sets max brightness to 100% and cycle on press 4
      int i = 0;
      int Bright = 0;
      for (i = 0; i < 6; ++i, Bright += (MaxBrightness / 5)) {
        Brightness[i] = Bright;
      }
      Cycle1 = 1;
    }
    if (ButtonPresses1 == 5) {
      Cycle1 = 2;  //sets cycle for full on on press 5
    }
    while (digitalRead(Button1) == LOW){};  //Block waiting on button release
  }
  //star control
  //cycle control - 0 is all off, 1 is fading, 2 is all on
  switch (Cycle1) {
    case 0: //All stars off
      for (int i = 0; i < 6; ++i) {
        analogWrite(Strands[i], 0);
      }
      break;
    case 1:  //stars fading
      if ((unsigned long)(CurMil - PrevMil) >= Interval1) {
        PrevMil = millis();
        for (int i = 0; i < 6; ++i) {

          if (Brightness[i] > MaxBrightness) {
            Brightness[i] = MaxBrightness;
          }
          if (Brightness[i] < 0) {
            Brightness[i] = 0;
          }
          analogWrite(Strands[i], Brightness[i]);
          //brightness stepping
          Brightness[i] = Brightness[i] + FadeAmount[i];

          //brightness reversal
          if (Brightness[i] <= 0 || (Brightness[i] >= MaxBrightness)) {
            FadeAmount[i] = -FadeAmount[i];
          }
        }
        break;
      case 2:  //All stars on
        for (int i = 0; i < 6; ++i) {
          analogWrite(Strands[i], 255);
        }
        break;
      }
  }
}