FUNÇÃO SWITCH CASE.

EU TENHO AQUI UM CÓDIGO QUE FUNCIONA USANDO DOIS BOTOES, UM DE INCREMENTO E OUTRA DE DECREMENTO, MAS GOSTARIA DE TER OUTROS DOIS BOTOES PARA FAZER A MESMA COISA MAS USANDO UMA OUTRA VARIÁVEL E CONTINUANDO A USAR O SWITCH CASE. E GOSTARIA DE SABER COMO FAÇO PARA ARRUMAR O CODIGO, POIS QUANDO EU COLOCO UM TEMPO DE DETERMINADO VALOR, SOU OBRIGADO A ESPERAR E EU USANDO A FUNÇÃO BREAK NAO DEVERIA ESPERAR. AGUEM PODE ME AJUDAR ? SEGUE O CODIGO ABAIXO :

int numero = 0;
char numero1 = 0; // COLOQUEI ESSE PARA OUTRA VARIÁVEL
int estadoBoton1 = 0;
int estadoBoton2 = 0;

void setup() {

pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}

void loop() {

estadoBoton1 = digitalRead(2);
estadoBoton2 = digitalRead(3);

if (estadoBoton1 == LOW and numero < 60) {
numero = numero + 1;
}

if (estadoBoton2 == LOW and numero > 0) {
numero = numero - 1;
}

switch (numero) {
case 0:
limpiar();
cero();
break;
case 1:
limpiar();
uno();
break;
case 2:
limpiar();
dos();
break;
case 3:
limpiar();
tres();
break;
case 4:
limpiar();
cuatro();
break;
case 5:
limpiar();
cinco();
break;
case 6:
limpiar();
seis();
break;
case 7:
limpiar();
siete();
break;
case 8:
limpiar();
ocho();
break;
case 9:
limpiar();
nueve();
break;
case 10:

}

delay(125);

}

void cero(){
digitalWrite(10,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
}

void uno(){
digitalWrite(8,HIGH);
digitalWrite(5,HIGH);
}
void dos(){
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(11,HIGH);
}
void tres(){
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
}
void cuatro(){
digitalWrite(8,HIGH);
digitalWrite(5,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
}
void cinco(){
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
}
void seis(){
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);

}
void siete(){
digitalWrite(8,HIGH);
digitalWrite(5,HIGH);
digitalWrite(9,HIGH);

}
void ocho(){

digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay (5000);
}
void nueve(){

digitalWrite(5,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
}

void dez(){
digitalWrite(10,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
}

void limpiar(){
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}

O problema nao e a instrucao break...

quando tu usas a funcao delay() ela fica ali a espera e nao executa mais nada ate ter passado o tempo que definiste.
No entanto, olhando a maneira como fizeste o codigo nao percebo porque e que so quando corres a funcao ocho e que tens de esperar 5 segundos... Importas-te de explicar?

Existem alternativas como por exemplo, usar a funcao millis() para temporizar intervalos.
Podes ver isso no exemplo Blink without delay.

Se queres fazer a mesma coisa com outros dois botoes e com outras saidas com LED, so tens de copiar o codigo e meter no mesmo ficheiro com uma variavel diferente.