Consulta error codigo 1 pulssador, 2 potenciometros, 3 led.

Hola a todos, resulta que estoy realizando un proyecto, donde mediante el uso de un pulsador se active dos potenciometros, uno de ellos tiene dos led que se encienden de forma independiente y el otro potenciometro tiene un led que prende y apaga, realice un codigo pero no funciona de manera correcta ya que el ejecutarlo solo funciona el potenciometro con los dos led que encienden de forma independiente, mientras que el otro potenciometro solo se queda encendido no apaga.

int led1          = 12;
int led2          = 13;
int pinPulsador   = 7;
int potenciometro = A0;
bool estado, estadoAnt;
bool flag = false;
int brillo;

int led3 = 11;
int potenciometro2 = A1;
int val = 0; 
int state = 0; 
int old_val = 0;

void setup() {
 pinMode(pinPulsador, INPUT); 
 pinMode (led1, OUTPUT);
 pinMode (led2, OUTPUT);
 pinMode(led3, OUTPUT);
 
}

void loop() {
  estado = digitalRead(pinPulsador);
   if (estado && !estadoAnt)
       flag = !flag;
   estadoAnt = estado;

   if (flag) {
       brillo = map(analogRead(potenciometro), 0, 1023, 0, 255);
       analogWrite(led1, brillo);
       analogWrite(led2, 255-brillo);
   }
   else {
       analogWrite(led1, LOW);
       analogWrite(led2, LOW);


       val= digitalRead(pinPulsador);
     if ((val == HIGH) && (old_val == LOW)){
state=1-state;
delay(250);}
old_val = val; 
if (state==1){
 digitalWrite(led3, HIGH); 
      potenciometro2 = (analogRead(0)/4); 
     
      analogWrite(led3, potenciometro2);  
      delay(20);                            
    }
else{
 digitalWrite(led3,LOW);
}

}
}

Se agradece de antemano cualquier ayuda.

Tu código es ilógico y te explico por qué?

Primero has tomado cosas de varios lugares porque como que no tienes un único criterio para las cosas.
O cambias una variable de un modo

flag = !flag;

o lo haces asi

flag = 1 - flag;

Otra cosa:
O usas esto

if (estado && !estadoAnt)
      flag = !flag;
  estadoAnt = estado;

para ver un flanco o usas esto

if ((val == HIGH) && (old_val == LOW)){
    state=1-state;
    delay(250);
}
old_val = val;

Con esto que te quiero decir?
Que deja de copiar y pegar y adopta un único método para las cosas.

Ademas todo esto va asociado de variables de uno y otro tipo

bool estado, estadoAnt;
bool flag = false;

int val = 0; 
int state = 0;

Bien, con hacerlo como el primer caso suficiente. Recuérdalo!!

Tu problema esta en que usas flag que cambia según la pulsación y luego dentro de !flag intentas leer de nuevo el mismo botón, algo que es ridículo porque cuando sale de las instrucciones entra en la condición donde de nuevo se ve el flanco y flag cambia por lo que nunca vuelve a ejecutarse lo que esperas haga.

Entonces, cómo lo resuelves?

La única manera que veo que un pulsador haga 3 cosas es que cada vez que pulses aumentes un contador y cada acción del contador haga algo, porque veo tres acciones y un pulsador.
No puedes comandar 3 cosas con algo que te brinda 2 opciones.
Pero si puedes hacer que un pulsador cambie el valor de un contador a 0..1..2 y cada una sea una tarea diferente.

Muchas gracias por la respuesta tome la información que me diste y realice nuevamente el código para aun no lo logro que funcione de forma correcta. lo que busco es que por un lado un potenciometro maneje el encendido y a apagados de 2 led y otro potenciometro maneje el encendido y apagado de un solo led y que esto se encienda y apague con 4 botones diferentes.

int led1          = 13;
int led2          = 12;
int pinPulsador1   = 7;
int pinPulsador2   = 6;
int pinPulsador3   = 5;
int pinPulsador4   = 4;
int potenciometro = A0;
bool estado, estadoAnt;
bool flag = false;
int led3          = 11;
int potenciometro2 = A1;
int brillo;

void setup() {
  pinMode(pinPulsador1, INPUT); 
  pinMode(pinPulsador2, INPUT);
  pinMode(pinPulsador3, INPUT);
  pinMode(pinPulsador4, INPUT);
  pinMode (led1, OUTPUT);
  pinMode (led2, OUTPUT); 
  pinMode (led3, OUTPUT);

}

void loop() {
    estado = digitalRead(pinPulsador1);
   if (estado && !estadoAnt)
       flag = !flag;
   estadoAnt = estado;

   if (flag) {
       brillo = map(analogRead(potenciometro), 0, 1023, 0, 255);
       analogWrite(led1, brillo);
       analogWrite(led2, 255-brillo);
       brillo = map(analogRead(potenciometro2), 0, 1023, 0, 255);
       analogWrite(led3, brillo);
   }
   else {
       analogWrite(led1, LOW);
       analogWrite(led2, LOW);
       analogWrite(led3, LOW);
   }
       estado = digitalRead(pinPulsador2);
   if (estado && !estadoAnt)
       flag = !flag;
   estadoAnt = estado;

   if (flag) {
       brillo = map(analogRead(potenciometro), 0, 1023, 0, 255);
       analogWrite(led1, brillo);
       analogWrite(led2, 255-brillo);
       brillo = map(analogRead(potenciometro2), 0, 1023, 0, 255);
       analogWrite(led3, brillo);
       
   }
   else {
       analogWrite(led1, LOW);
       analogWrite(led2, LOW);
       analogWrite(led3, LOW);
   }
       estado = digitalRead(pinPulsador3);
   if (estado && !estadoAnt)
       flag = !flag;
   estadoAnt = estado;

   if (flag) {
       brillo = map(analogRead(potenciometro), 0, 1023, 0, 255);
       analogWrite(led1, brillo);
       analogWrite(led2, 255-brillo);
       brillo = map(analogRead(potenciometro2), 0, 1023, 0, 255);
       analogWrite(led3, brillo);
   }
   else {
       analogWrite(led1, LOW);
       analogWrite(led2, LOW);
       analogWrite(led3, LOW);
   }
       estado = digitalRead(pinPulsador4);
   if (estado && !estadoAnt)
       flag = !flag;
   estadoAnt = estado;

   if (flag) {
       brillo = map(analogRead(potenciometro), 0, 1023, 0, 255);
       analogWrite(led1, brillo);
       analogWrite(led2, 255-brillo);
       brillo = map(analogRead(potenciometro2), 0, 1023, 0, 255);
       analogWrite(led3, brillo);
   }
   else {
       analogWrite(led1, LOW);
       analogWrite(led2, LOW);
       analogWrite(led3, LOW);
   }
}

Ok, pero ahora tienes 4 pulsadores y usas la misma variable estado estadoAnt para las 4, dime... se te pasó por alto?

llama estado1, estado1Ant y asi hasta estado4 estado4Ant
y 4 flags flag1 a flag4.

Sentido común!!!

Y cuando un código no funcione, usa Serial.print para que te imprima situaciones particulares y vas viendo que hace bien y que hace mal.