Control de contador con 7 segmentos y pulsadores

Hola buenas noches, me podrian ayudar con esto, quiero que hacer el control de un 7 segmentos con un pulsador que mande al señal de ascender o descender(en la programacion hay unas leds que indican cuando esta haciendo cada accion) dependiendo de la cantidad de pulsos que mande ejemplo: con
1.ascienda
2.pare
3.descienda

int display7a[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
//Delcaración de Los Pines del Display
byte a=2;
byte b=3;
byte c=4;
byte d=5;
byte e=6;
byte f=7;
byte g=8;
byte inc=9;    //Pulsador control de ascendente y descendente 
byte det1=10;   //Pulsador stop ascendencia
byte ledrojo=12;
byte ledverde=13;
byte det2=11;//Pulsador stop descendencia
int op=0;
int contador=0;
int i=0;
int value=0;
//Función que coloca en el puerto de salida los bits comenzando
// desde el pin ini hasta el pin fin
void puerto(int bits,int ini,int fin){
  for(int i=ini;i<=fin;i++)
  {
    digitalWrite(i,bitRead(bits,i-ini));
  }
}
void setup() {
pinMode(inc,INPUT);
  pinMode(det1,INPUT);
  pinMode(det2,INPUT);
  pinMode(ledrojo,OUTPUT);
  pinMode(ledverde,OUTPUT);
  //Configura los 8 Pines digitales como SALIDAS
  for(int i=a;i<=g;i++){
    pinMode(i,OUTPUT);
  }

}
void loop() {
  digitalRead(inc);
    value=digitalRead(inc);//hago que el pulsos se conviertan en la opcion de trabajo
    if(value==HIGH){
      op=op+1;}
      else{
      op==op;}
    
    switch(op){
    case 1:{    // asciende y la opcion de stop
   
    
      
      digitalRead(det1);
      if(digitalRead(det1)==HIGH){
        contador=contador;
        puerto(display7a[contador],a,g);
      }
      else{
        contador++;
      digitalWrite(ledrojo, HIGH);
      digitalWrite(ledverde, LOW);
      puerto(display7a[contador],a,g);
      }
     }
      
    
    case 2: //asciende stop
    {
    contador==contador;
     digitalWrite(ledrojo, LOW);
      digitalWrite(ledverde, LOW);
      puerto(display7a[contador],a,g);
    }
      
    
    case 3:{  //desciende y la opcion a stop
      
      
       digitalRead(det2);
      if(digitalRead(det2)==HIGH){
        contador=contador;
        puerto(display7a[contador],a,g);
      }
      else{
      contador--;
      digitalWrite(ledrojo, LOW);
      digitalWrite(ledverde, HIGH);
      puerto(display7a[contador],a,g);
      }
      }
    
    
    case 4: //deciende stop
     {
      contador==contador;
      digitalWrite(ledrojo, LOW);
      digitalWrite(ledverde, LOW);
      puerto(display7a[contador],a,g);
    }
   
    
    default:
    {
      op=op-op;
    }
    }
   
}

Acá hay un "problema" y un error

else{
      op==op;}

[/quote]

El "problema": Si bien no es incorrecto es innecesario, ya que de no cumplirse el if() que lo precede la variable igualmente no cambiaría el valor, por ende eso "sobra".

El error: el doble signo igual ( == ) indica una condición de igualdad.
Lo que corresponde en este caso es un solo signo ( = ) porque lo que hay que hacer es una asignación de una valor a una variable.

Revisa porque lo mismo ocurre un par de veces con la variable contador ya que

contador == contador;

repites el error de escritura y lo innecesario de asignar a una variable el valor que la misma variable ya contiene (de hecho es muy probable que el compilador ignore esa instrucción).

Saludos

ok, ya lo cambie los "==" por "=", ahora inicio el circuito, pero pasa de 0 a 1 y regresa a 0, porque puede ser? algun error en los "case"?.

Te faltó poner

break;

como instrucción final de cada case sino se ejecutan todos uno tras otro.

Saludos

ya funciona mas o menos como queria, lo terminare por mi cuenta, si no puedo volvere xD.
gracias por la ayuda :smiley:

Dale.
Y si sale contanos tus avances! :wink:

Saludos