Problema Switch case

Hola estoy empesando en esto de arduino y necesitaba un poco de ayuda. Estoy haciendo un trabajo en el que uso una fila de 10 leds y con un pushbutton debo cambiar la funcion de encendido.
por default deben prender como el auto Knight Rider al precionar una ves se debe volver un contador binario, al la tercera prender de forma aleatoria y por ultimo deben prender con el valor de un potenciometro.
Estoy manejando un switch case para controlar con el boton pero a la hora de entrar al contador binario que es mi case 1: ya no puedo salir sin importar que siga precionando el boton. Les anexo lo que llevo de codigo ojala me puedan auxiliar y de antemano muchas gracias.

int pinLed;
int i;
int j;
int randNumber;
int pinPotenciometro;
int valorPotenciometro;
int pulsaciones=0;
int button=13;

void setup()
{
  pinMode(button,INPUT);
  pinMode(pinPotenciometro, INPUT);
  Serial.begin(9600);
  for(pinLed=2;pinLed<12;pinLed++){
  pinMode(pinLed, OUTPUT);
  }
}

void loop()
{ 
  
 if (digitalRead (button) == HIGH){
      pulsaciones ++;
      Serial.print (pulsaciones); // Imprime el numero de pulsacion en el Serial Monitor de Arduino//
    }
   Serial.print (pulsaciones);
  switch (pulsaciones){
    case 0:
    	for(pinLed=2;pinLed<12;pinLed++){
  		digitalWrite(pinLed, HIGH);
  		delay(100); // Wait for 1000 millisecond(s)
  		digitalWrite(pinLed, LOW);
  		}
  		for(pinLed=10;pinLed>1;pinLed--){
  		digitalWrite(pinLed, HIGH);
  		delay(100); // Wait for 1000 millisecond(s)
  		digitalWrite(pinLed, LOW);
  		}
    break;
    
    case 1:
  		for ( int i = 0; i < 255; i++)
  		{
     		for ( int j = 0; j < 11; j++)
     		{
       		pinLed=j;
       		if ( ( (i >> j) & 1 )  == 1 )
           		digitalWrite(pinLed+2, HIGH);
       		else digitalWrite(pinLed+2, LOW);
     		}
     	delay(100);
  		}
    break;
    
    case 2:
  		randNumber = random(2,11);    // genera número aleatorio entre 1 y 10
  		pinLed = randNumber;
  		digitalWrite(pinLed,HIGH); 
  		delay(200); 
  		digitalWrite(pinLed,LOW);
    break;
    
    case 3:
  		valorPotenciometro = analogRead(pinPotenciometro);
  		Serial.println(valorPotenciometro, DEC);
  		delay(100);  
   		for (i = 0; i < 11; i++)
   		{
    		if (valorPotenciometro == 0) apagarLeds();
    		if (valorPotenciometro > i*102 && valorPotenciometro < (i+1)*102){
      		pinLed=i+2;
      		digitalWrite(pinLed, HIGH);
      		for(pinLed = i+2 ; pinLed <11; pinLed ++)
        		digitalWrite(pinLed,LOW);
    		}
    		if (valorPotenciometro == 1023) encenderLeds();
  		}
    break;
    
    case 4:
    	pulsaciones=0;
    break;
  }
}

void apagarLeds()
 {
  for (pinLed = 2; pinLed < 12; pinLed++)
   digitalWrite(pinLed, LOW);
 }

void encenderLeds()
 {
  for (pinLed = 2; pinLed < 12; pinLed++)
   digitalWrite(pinLed, HIGH);
 }

He modificado tu código levemente para que la función del pulsador sea mas estable.

Mira a ver.
Por favor cuando presentes un código ante una comunicad tomate un tiempo para identarlo, o sea que se lea prolijo, me llevó mas tiempo organizarlo que corregir tu posible problema.

Veamos

int pinLed;
int i;
int j;
int randNumber;
int pinPotenciometro;
int valorPotenciometro;
int pulsaciones=0;
int button=13;
bool boton;
bool botonAnt = false;

void setup() {
    pinMode(button,INPUT);
    pinMode(pinPotenciometro, INPUT);
    Serial.begin(9600);
    for (pinLed=2;pinLed<12;pinLed++){
        pinMode(pinLed, OUTPUT);
    }
}

void loop()
{ 
    boton = digitalRead(button);
    if (boton && !botonAnt){
        pulsaciones++;
        Serial.print(pulsaciones); // Imprime el numero de pulsacion en el Serial Monitor de Arduino//
    }
    botonAmt = boton;

    switch (pulsaciones){
      case 0: for (pinLed=2;pinLed<12;pinLed++){
                  digitalWrite(pinLed, HIGH);
                  delay(100); // Wait for 1000 millisecond(s)
                  digitalWrite(pinLed, LOW);
              }

              for (pinLed=10;pinLed>1;pinLed--){
                  digitalWrite(pinLed, HIGH);
                  delay(100); // Wait for 1000 millisecond(s)
                  digitalWrite(pinLed, LOW);
              }
              break;

      case 1: for ( int i = 0; i < 255; i++)  {
                  for ( int j = 0; j < 11; j++) {
                      pinLed=j;
                      if ( ( (i >> j) & 1 )  == 1 )
                          digitalWrite(pinLed+2, HIGH);
                      else digitalWrite(pinLed+2, LOW);
                    }
                  delay(100);
              }
              break;

      case 2: randNumber = random(2,11);    // genera número aleatorio entre 1 y 10
              pinLed = randNumber;
              digitalWrite(pinLed,HIGH); 
              delay(200); 
              digitalWrite(pinLed,LOW);
              break;

      case 3: valorPotenciometro = analogRead(pinPotenciometro);
              Serial.println(valorPotenciometro, DEC);
              delay(100);  
              for (i = 0; i < 11; i++) {
                  if (valorPotenciometro == 0) apagarLeds();
                      if (valorPotenciometro > i*102 && valorPotenciometro < (i+1)*102) {
                          pinLed=i+2;
                          digitalWrite(pinLed, HIGH);
                          for (pinLed = i+2 ; pinLed <11; pinLed ++)
                               digitalWrite(pinLed,LOW);
                      }
                  if (valorPotenciometro == 1023) 
                      encenderLeds();
              }
              break;

      case 4: pulsaciones=0;
              break;
    }
}

void apagarLeds() {
  for (pinLed = 2; pinLed < 12; pinLed++)
       digitalWrite(pinLed, LOW);
 }

void encenderLeds() {
  for (pinLed = 2; pinLed < 12; pinLed++)
      digitalWrite(pinLed, HIGH);
}