problema con multiples programas con un solo pulsador

Hola a todos!!!

hice un proyecto el cual usa 3 pulsadores , Uno para restar , otro para sumar y otro para seleccionar, estos sirven para accionar y seleccionar diferentes acciones para un servo motor .

tiene un contador para luego en cada numero que cuenta se use un switch y case y en cada caso se accione un programa diferente para el servo motor. ( ejemplo: case 1 y el servo motor se mueve a 90 grados espera 5 segundos y vuelve a 0 grados) . hasta acá todo perfecto.
El problema surge cuando uno de los case que quiero usar sea para personalizar el movimiento del servo segun las preferencias del usuario , para esto creo un nuevo contador el cual serviria para sumar segundos y movimientos del servo . Al querer usar los mismos pulsadores para el contador anterior y este nuevo contador para la personalización del movimiento del servo , este pulsador, responde al contador anterior y yo quisiera que deje de responder al contador anterior y solo actue en el nuevo contador . no se si se entiende bien ya que es dificil de explicar. voy a dejar el codigo hasta donde lo tengo a ver si se entiende mejor y me puede ayudar. cualquier consulta diganme a ver como puedo resolver esto.

#include <Servo.h>

Servo motor;


 
int valor, valor1, estado;

const int pulsador_asc = 8;
const int pulsador_des = 12;
const int botonselect = 10;

int contador = 0;

  
int estado_pulsador_sumaseg = 0;
int lastbuttonstate_sumaseg = 1;
int contador_sumaseg = 0;

int selectpulsado;

int estado_pulsador_asc = 0;
int lastbuttonstate_asc = 1;

int estado_pulsador_des = 0;
int lastbuttonstate_des = 1;

int programa_personalizado = 0;


void setup() {

  motor.attach(6);
  Serial.begin(9600);
  pinMode(pulsador_asc,INPUT);
  pinMode(pulsador_des, INPUT);
  pinMode(botonselect, INPUT);
  motor.write(0);
  
}

void loop() {
  
  


  selectpulsado = digitalRead(botonselect);
  estado_pulsador_asc = digitalRead(pulsador_asc);  
  estado_pulsador_des = digitalRead(pulsador_des);
  estado_pulsador_sumaseg = digitalRead(pulsador_asc);

  
  //Serial.println(selectpulsado);
  //Serial.println(estado_pulsador_des);
  //delay(1000);
  

  
  if(estado_pulsador_asc != lastbuttonstate_asc)
  {  
     if(estado_pulsador_asc == HIGH)
     { 
        contador++;
        Serial.println("+");
        Serial.print("programa numero: ");
        Serial.println(contador);
        delay(100);
     }
  }
  lastbuttonstate_asc = estado_pulsador_asc;

  if (estado_pulsador_des != lastbuttonstate_des)
  {
    if(estado_pulsador_des == HIGH)
    {
      
    contador --;
    Serial.println("-");
    Serial.print("programa numero: ");
    Serial.println(contador);
    delay(100);
    }
  } 

  lastbuttonstate_des = estado_pulsador_des;
  
if ((contador > 9)&&(contador = 10))
    {
      contador = 9;}
     else if
     
       (contador < 1 )
    {
      contador = 0;
    }
      
     
    


  
switch(contador)
{
  case 0:
     if ((contador == 0)&&(selectpulsado ==HIGH))
          
      {
        
          
          if(estado_pulsador_sumaseg != lastbuttonstate_sumaseg)
            {
            
            Serial.println("FUNCIONAAAA");
            Serial.println(estado_pulsador_sumaseg);
            Serial.println(lastbuttonstate_sumaseg);
        
              
               if(estado_pulsador_sumaseg == HIGH)
                   { 
                       
                      contador_sumaseg++;
                      Serial.println("+");
                      Serial.print("suma 10 segundos: ");
                      Serial.println(contador_sumaseg);
                      selectpulsado = LOW;
                      delay(100);
                      
                    }
            }
             lastbuttonstate_sumaseg = estado_pulsador_sumaseg;

             Serial.println(estado_pulsador_sumaseg);
            Serial.println(lastbuttonstate_sumaseg);
           
          
          
      
      }
     break;

  case 1:
     if((contador == 1)&&(selectpulsado ==HIGH))
     { 

        delay(5000);
        motor.write(90);
        delay(5000);
        motor.write(0);
        selectpulsado = LOW;
        contador = 0;

     }  
     break;
   case 2:
         if((contador == 2)&&(selectpulsado ==HIGH))
     { 

        delay(1000);
        motor.write(120);
        delay(1000);
        motor.write(0);
        selectpulsado = LOW;  
        contador = 0;
      }
      break;
    case 3:
        if ((contador == 3)&&(selectpulsado==HIGH))
      {
         delay(1000);
         motor.write(50);
         delay(1000);
         motor.write(90);
         delay(1000);
         motor.write(0);
         selectpulsado = LOW;
         contador = 0;
         
      }
      break;
}
  
}

MUCHAS GRACIAS

Porque no usas un contador asociado al case que uses? Un vector de contadores o contador[contador_seleccionado]

Esta variable nueva contador_seleccionado es la que cambiará cuando justamente cambies de contador. Arranca en 0 y cada selección la incrementa o decrementa. Podrías por ejemplo cambiarlas digamos si mantienes SELECT y ASC o DES presionados. Es una idea.

Hola!

En primera instancia muchas gracias por la respuesta. Voy a probar lo que me decis a ver si puedo lograrlo .

De nuevo gracias.

Saludos.

Estuve a punto de sugerirte la librería que yo he usado pero.. en todos los casos tiene un LCD asi que si en tu proyecto lo has considerador esta librería LCDMenuLib2 te será muy util, porque maneja todos los posibles ingresos de datos con 3,4 y 6 botones, y otros modos de ingreso incluido el ingreso por Serial como el que planteas.

Este es el ejemplo SerialMonitor

tal vez luzca complicado al comienzo pero míralo con tranquilidad a ver si se adapta a tu necesidad y en todo caso hablamos de como adecuarlo.

Hola nuevamente , estuve intentando modificar mas el código pero no tuve avances , tampoco es que sea un gran programador ni mucho menos, estoy empezando y se me complica mucho.

intente hacer lo que dijiste surbyte pero no tuve éxito, creo que no llegue a entender bien lo que me dijiste. podría ser que me des un ejemplo de código, nada largo solo a modo de ejemplo para poder ahondar en escribir el programa con un poco mas de idea ya que como mencione antes soy primerizo .

de ante mano agradezco el tiempo y la ayuda .

saludos.