4 Leds con variación de parámetros

Hola que tal???
Hace poco y nada que arranqué con Arduino y con la programación. Luego de realizar varios de los circuitos básicos con ayuda de la web y de lo publicado en este foro, fui agregando un poco de complejidad a la cuestión y llegué a este circuito que, si bien sigue siendo básico, hizo que echara toda la carne al asador. Más que esto no sé y estoy seguro de que tengo mucho para corregir.
Si bien el circuito funciona, lo hace de manera media tosca.

La idea es la siguiente:

El circuito consta de 4 leds que se encienden y se apagan uno atrás del otro como un tren de pulsos, termina y vuelve a arrancar. Tiene un botón de encendido y apagado general para todo el sistema. Cuando está encendido, se pueden activar, a su vez, un control de brillo y uno de velocidad del tren de pulsos, cada uno de estos parámetros son controlados por potenciometros y posee un led que indican cuando están activados para ser modificados.

El problema que tengo es que una vez encendido el sistema me cuesta apagarlo, toco reiteradas veces el botón y dependiendo del tiempo que lo mantenga se apaga o no. Me sucede con los tres pulsadores que tengo en el circuito.
Ademas no logro tener un buen control sobre la velocidad, giro un poco el pote y ya agarra una velocidad importante. Quizás sea logarítmico o no, no lo se, pero me gustaría poder controlarlo mejor independientemente de eso.

No pretendo que suban un código con la solución ni nada de eso, sino simplemente que me digan por donde viene la mano para solucionar estos problemas y yo investigo.

Disculpen que me haya extendido. Dejo el código abajo. Cuando sepa como subir fotos pongo una del circuito, quizás le sirva a alguno con la misma duda o proyecto.

Gracias!!!!

const int pot1 = A5;
const int pot2 = A4;
const int ledp1 = 3;
const int ledp2 = 8;
const int pulsador1 = 4;
const int pulsador2 = 7;
const int pulsadorEncendido = 12;
const int Led[] = { 6 , 9 , 10 ,  11};
int brillo = 0;
int ratio = 0;
int estadoActual = 0;
int estadoAnterior = 0;
int estadoActualP1 = 0;
int estadoActualP2 = 0;
int estadoAnteriorP1 = 0;
int estadoAnteriorP2 = 0;
int n=0;
int tiempo = 0;

void setup() {
 
  pinMode(pot1 , INPUT);
  pinMode(pot2 , INPUT);
  pinMode(ledp1 , OUTPUT);
  pinMode(ledp2 , OUTPUT);
  pinMode(pulsador1 , INPUT);
  pinMode(pulsador2 , INPUT);
  pinMode(pulsadorEncendido , INPUT);
  for( n=0 ; n<5 ; n++){
    pinMode( Led[n] , OUTPUT);
  }
}

void loop(){
  estadoActual = digitalRead(pulsadorEncendido);
  brillo = analogRead(pot1) / 4;
  ratio = analogRead(pot2) /4;
  estadoActualP1 = digitalRead(pulsador1);
  estadoActualP2 = digitalRead(pulsador2);
  
  if(estadoActual == HIGH){
   estadoAnterior = !estadoAnterior;
   delay(200);
   }

  
  if(estadoAnterior == HIGH){
    
    if(estadoActualP1==HIGH){
      estadoAnteriorP1=!estadoAnteriorP1;
      delay(200);
    }
    
    if(estadoActualP2 == HIGH){
      estadoAnteriorP2 = !estadoAnteriorP2;
      delay(200);
    }
    
    if(estadoAnteriorP1 == HIGH){
      digitalWrite(ledp1 , HIGH);
    }
    else{
      digitalWrite(ledp1 , LOW);
    }
    if(estadoAnteriorP2 == HIGH){
      digitalWrite(ledp2 , HIGH);
    }
    else{
      digitalWrite(ledp2 , LOW);
    }
  
  if( estadoAnteriorP1 == 0 && estadoAnteriorP2 == 0){
    for(n=0 ; n<5 ; n++){
      digitalWrite(Led[n] , HIGH);
      delay(100);
      digitalWrite(Led[n] , LOW);
      delay(100);
      }
    }
  if(estadoAnteriorP1 == HIGH && estadoAnteriorP2 == 0){
    for(n=0 ; n<5 ; n++){
      analogWrite(Led[n] , brillo);
      delay(100);
      digitalWrite(Led[n] , LOW);
      delay(100);
      }
    }
  if(estadoAnteriorP1 == 0 && estadoAnteriorP2 == HIGH){
    for(n=0 ; n<5 ; n++){
      digitalWrite(Led[n] , HIGH);
      delay(ratio);
      digitalWrite(Led[n] , LOW);
      delay(ratio);
      }
   }
  if(estadoAnteriorP1 == HIGH && estadoAnteriorP2 == HIGH){
    for(n=0 ; n<5 ; n++){
      analogWrite(Led[n] , brillo);
      delay(ratio);
      digitalWrite(Led[n] , LOW);
      delay(ratio);
      }
    }
  }  
      
  
    
    
  
  if(estadoAnterior == LOW){
    for(n=0 ; n<5 ; n++){
      digitalWrite(Led[n] , LOW);
    }
    digitalWrite(ledp1 , LOW);
    digitalWrite(ledp2 , LOW);
  }
  }

prueba algo asi:

const byte pot1 = A5;
const byte pot2 = A4;
const byte ledp1 = 3;
const byte ledp2 = 8;
const byte pulsador1 = 4;
const byte pulsador2 = 7;
const byte pulsadorEncendido = 12;
const byte Led[] = { 6 , 9 , 10 ,  11};

bool estadoAnterior;
bool estadopulsadorEncendido;
bool estadoActualP1;
bool estadoActualP2;

bool CircuitoEncendido = false;
bool ControlVelocidad  = false;
bool ControlIntensidad = false;

int brillo = 0;
int ratio = 0;

int n=0;

int RATIO = 0;
int BRILLO =0;

void setup() 
{ 
  pinMode(pot1 , INPUT);
  pinMode(pot2 , INPUT);
  pinMode(ledp1 , OUTPUT);
  pinMode(ledp2 , OUTPUT);
  pinMode(pulsador1 , INPUT);
  pinMode(pulsador2 , INPUT);
  pinMode(pulsadorEncendido , INPUT);
  for( n=0 ; n<5 ; n++){pinMode( Led[n] , OUTPUT);}
}

void loop()
{
  estadoAnterior = estadopulsadorEncendido;
  estadopulsadorEncendido= digitalRead(pulsadorEncendido);
  if(estadopulsadorEncendido && !estadoAnterior) {CircuitoEncendido = !CircuitoEncendido;}         // Cambio estado pulsador de low a high
  
  estadoAnterior = estadoActualP1;
  estadoActualP1 = digitalRead(pulsador1);
  if(estadoActualP1 && !estadoAnterior) {ControlVelocidad = !ControlVelocidad;}
  
  estadoAnterior = estadoActualP2;
  estadoActualP2 = digitalRead(pulsador2);
  if(estadoActualP2 && !estadoAnterior) {ControlIntensidad = !ControlIntensidad;}

  brillo = analogRead(pot1) / 4;
  ratio = analogRead(pot2) /4;

  if (CircuitoEncendido)
  {     
    if (ControlVelocidad) {RATIO = ratio;} else {RATIO = 100;}
    if (ControlIntensidad){BRILLO = brillo;} else {BRILLO = 255;}
    for(n=0 ; n<5 ; n++)
    {
      analogWrite(Led[n] , BRILLO);
      delay(RATIO);
      digitalWrite(Led[n] , LOW);
      delay(RATIO);
    }       
  }
  else
  {
    ControlVelocidad = false;
    ControlIntensidad = false;
    for(n=0 ; n<5 ; n++) {digitalWrite(Led[n] , LOW);}
  }
  
  digitalWrite(ledp1 , ControlVelocidad);
  digitalWrite(ledp2 , ControlIntensidad);
}

creo que debería funcionar pero esta sin probar