Go Down

Topic: Contador ascendente y descendente con display 7 segmentos (Read 188 times) previous topic - next topic

wilmer7521

Nwcwsito que me ayuden con un problema que tengo ya que necesito hacer un pushbutton que al presionarlo el display me vuelva a cero sin importar en que numero este y tengo el siguiente codigo el cual solo cuenta con dos botones uno para el aumento y el otro para el decremento.




 const int pulsadorIncremento = 6; // Pin digital para el pulsador de incremento
  const int pulsadorDecremento = 5; // Pin digital para el pulsador de decremento
  const int tiempoAntirrebote = 10; // Variable para almacenar el tiempo antirrebote
 
  // Variables necesarias para los cálculos internos
  int cuenta = 0;
  int estadoPulsadorIncremento;
  int estadoPulsadorAnteriorIncremento;
  int estadoPulsadorDecremento;
  int estadoPulsadorAnteriorDecremento;
 
  // Función antirrebote
  boolean antirrebote(int pin)
  {
    int contador = 0;
    boolean estado;
    boolean estadoAnterior;
   
    do
    {
      estado = digitalRead(pin);
      if(estado != estadoAnterior)
      {
        contador = 0;
        estadoAnterior = estado;
      }
      else
      {
        contador = contador+ 1;
      }
      delay(1);
    } while(contador < tiempoAntirrebote);
   
    return estado;
  }
 
   // Función del display: Se reciben 7 variables y se asignan a cada una de las salidas
  void Costa (int a, int b, int c, int d, int e, int f, int g)
  {
    digitalWrite (7,a);   
    digitalWrite (8,b);   
    digitalWrite (9,c);
    digitalWrite (10,d);
    digitalWrite (11,e);
    digitalWrite (12,f);
    digitalWrite (4,g);
  }
 
  // Función que actualiza el número que aparece en el display de 7 segmentos               
  void actualizarNumero()
  {
    switch(cuenta){
       case 0 : Costa(0,0,0,0,0,0,1);break;
    case 1 : Costa(1,0,0,1,1,1,1);break;
    case 2 : Costa(0,0,1,0,0,1,0);break;
    case 3 : Costa(0,0,0,0,1,1,0);break;
    case 4 : Costa(1,0,0,1,1,0,0);break;
    case 5 : Costa(0,1,0,0,1,0,0);break;
    case 6 : Costa(1,1,0,0,0,0,0);break;
    case 7 : Costa(0,0,0,1,1,1,1);break;
    case 8 : Costa(0,0,0,0,0,0,0);break;
    case 9 : Costa(0,0,0,1,1,0,0);break;
    case 10 : Costa(0,0,0,1,0,0,0);break;
    case 11 : Costa(1,1,0,0,0,0,0);break;
    case 12 : Costa(0,1,1,0,0,0,1);break;
    case 13 : Costa(1,0,0,0,0,1,0);break;
    case 14 : Costa(0,1,1,0,0,0,0);break;
    case 15 : Costa(0,1,1,1,0,0,0);break;
    }
  }
   
 
  void setup()
  {
    // Asignación de los pines digitales para el display de 7 segmentos como salidas
    pinMode(7, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(12, OUTPUT);
    pinMode(4, OUTPUT);
 
    // Asignación de los pines digitales para los pulsadores como entradas
    pinMode(pulsadorIncremento, INPUT);
    pinMode(pulsadorDecremento, INPUT);
  }
 
 
  void loop()
  { 
    // Leemos el estado del pulsador de incremento
    estadoPulsadorIncremento = digitalRead(pulsadorIncremento);   
    // Si hay un cambio en el estado del pulsador de incremento
    if(estadoPulsadorIncremento != estadoPulsadorAnteriorIncremento)
    {
      // y si se ha eliminado ya el rebote del pulsador de incremento
      if(antirrebote(pulsadorIncremento))
      {
        // Se incrementa la cuenta en una unidad
        cuenta++;
        // Si la cuenta es mayor que 9, permanece en 9.
        if(cuenta > 15)
        {
          cuenta = 15;
        }
      }
    }
    // Actualizamos el estado anterior del pulsador de incremento   
    estadoPulsadorAnteriorIncremento = estadoPulsadorIncremento;

    // Leemos el estado del pulsador de decremento
    estadoPulsadorDecremento = digitalRead(pulsadorDecremento);
     // Si hay un cambio en el estado del pulsador de decremento
    if(estadoPulsadorDecremento != estadoPulsadorAnteriorDecremento)
    {
      // y si se ha eliminado ya el rebote del pulsador de decremento
      if(antirrebote(pulsadorDecremento))
      {
        // Se decrementa la cuenta en una unidad
        cuenta--;
        // Si la cuenta es menor que 0, permanece en 0.
        if(cuenta < 0)
        {
          cuenta = 0;
        }
      }
    }
    // Actualizamos el estado anterior del pulsador de decremento     
    estadoPulsadorAnteriorDecremento = estadoPulsadorDecremento;
   
    // Actualizamos el número que aparece en el display de 7 segmentos   
    actualizarNumero();
  }

Go Up