Practica 07 – Display de 7 segmentos

Objetivo:
Mediante el uso de dos botones hacer que un display muestre los numeros del 0 al 9, un boton sera para incrementar el número y el otro para disminuirlo.

Material necesario:
1 – Tarjeta ARDUINO UNO
1 – Cable USB para Arduino
1 – Tarjeta Protoboard
1 – Software IDE de Arduino
1 Display de 7 segmentos de cátodo común, del color que deseen.
2 Micro botón de pulso de 4 patas o de 2.
2 Resistencias de 10K
9 resistencias 220 o 330 ohms.
Cables  (los que se necesiten)

Descripción

  1. Para comenzar conectamos un display de 7 segmentos a la Arduino.
  2. Después tomando como referencia la siguiente imagen, conectamos una resistencia a cada pin del display y basándonos en la letras asignadas de la resistencia conectamos a los pines digitales de Arduino comenzando por el 2 (a-2, b-3, c-4, d-5, e-6, f-7, g-8).

    Diagrama de un display de 7 segmentos

  3. Ahora el pin Com que está del lado del punto decimal se conecta a tierra.
  4. Una vez conectado todo el cableado del display se procede a colocar los dos botones para controlar el display.
  5. Para eso conectamos los dos botones, a ambos les conectamos una resistencia de 10K ohm y en medio de estos un cable que va a ir a los pines digitales de Arduino  en este caso el botón de incrementar ira al pin 9 y el de decrementar al pin 10.
  6. Ahora a otro extremo de los botones se conectaran cables que iran a la línea roja de nuestra protoboard y de esta línea sacaremos un cable que ira a la conexión de 5v.

    Esquema de conexión de la práctica 7 realizado en Fritzing.

    Esquema de conexión de la práctica realizado en Fritzing.

Código

/* se declaran las contantes para identificar cada led*/
const int a = 2;
const int b = 3;
const int c = 4;
const int d = 5;
const int e = 6;
const int f = 7;
const int g = 8;
const int BtnIncremento = 9; // boton de incremento conectadoa al pin 9
const int BtnDecremento = 10; // boton de decremento conectadoa al pin 10

const int tiempoAntirebote =10;
int cuenta =0;	//lleva la cuenta
int estadoBtnIncremento;
int estadoBtnIncrementoAnterior;
int estadoBtnDecremento;
int estadoBtnDecrementoAnterior;

boolean antirebote  (int pin ) {
  int  contador =0;
  boolean estado;               // guarda el estado del boton 
  boolean estadoAnterior;      // guarda el ultimo estado del boton 

  do {  
    estado = digitalRead (pin);
    if (estado != estadoAnterior ){   // comparamos el estado actual 
      contador =0;                    // reiniciamos el contador 
      estadoAnterior= estado;
    }
    else{
      contador = contador +1;          // aumentamos el contador en 1
    }
    delay (1);
  }
  while (contador < tiempoAntirebote);
  return estado;
}
/* Metodo para elegir que numero mostrar en el display*/
void actualizarNumero(){
  switch (cuenta) {
  case 0:
    /*Bloque para mostrar un 0*/
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    break;
  case 1:
    /*Bloque para mostrar un 1*/
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    break;
  case 2:
    /*Bloque para mostrar un 2*/
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    break;
  case 3:
    /*Bloque para mostrar un 3*/
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    break;
  case 4:
    /*Bloque para mostrar un 4*/
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 5:
    /*Bloque para mostrar un 5*/
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 6:
    /*Bloque para mostrar un 6*/
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 7:
    /*Bloque para mostrar un 7*/
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    break;
  case 8:
    /*Bloque para mostrar un 8*/
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    break;
  case 9:
    /*Bloque para mostrar un 9*/
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

  }
}

void setup(){
  /*Declaramos los segmetos del display como salidas*/
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  /*Declaramos los botones como entradas*/
  pinMode(BtnIncremento, INPUT);
  pinMode(BtnDecremento, INPUT);

}

void loop() {
  estadoBtnIncremento = digitalRead(BtnIncremento);
  if (estadoBtnIncremento  != estadoBtnIncrementoAnterior) {     // si hay cambio con respeto al estado 
    if (antirebote (BtnIncremento)){			//checamos  si esta preionado y si lo esta 
      cuenta++;                                //aumentamos la cuenta
      if (cuenta > 9){						
        cuenta = 9;
      }
    }
  }
  estadoBtnIncrementoAnterior = estadoBtnIncremento;              // guardamos el estado del boton

  estadoBtnDecremento = digitalRead(BtnDecremento);		//leemos el estado del boton
  if (estadoBtnDecremento  != estadoBtnDecrementoAnterior) {     // si hay cambio con respeto al estado anterior
    if (antirebote (BtnDecremento)){	//si el boton esta presionado disminuimos la cuenta
      cuenta--;                              
      if (cuenta<0){

        cuenta = 0;
      }
    }
  }
  estadoBtnDecrementoAnterior = estadoBtnDecremento;  //guardamos el estado del boton 

  actualizarNumero();	//desplegamos la cuenta en el display
}

Resultados
Al cargar el programa en el Arduino el display muestra el numero 0 en su pantalla, si oprimimos el boton de decremento no pasa nada y si oprimimos el de aumento se iran mostrando los numeros hasta llegar al 9, cuando se llega al 9 deja de presentarse cambios. Si oprimimos los botones cuando el display muestr los numeros 1-8, el numero cambiara dependiendo de que botón oprimamos, si los oprimimos cuando muestre 0 o 9 solo cambiara cuando se oprima el de aunmento para el 0 y descremento para el 9.

Experiencia
Con esta práctica aprendí a utilizar un medio electrónico que muestra una salida visual comprensible, en este caso números, esto es muy útil para complementar con otro tipo de prácticas. También aprendí sobre el uso del switch y el case en Arduino para así determinar que numero mostrar en el display. Y por último la importancia de hacer nuestras conexiones ordenadamente cuando la práctica requiere el uso de mucho cableado.

3 comentarios en “Practica 07 – Display de 7 segmentos

    1. Allistter Autor

      Tal vez de las demás prácticas no tenga idea, pero esta es fácil el código es entendible y no es difícil el circuito, asegurate que haces todo bien, pero antes asegurarse de que tus componentes son los mismos que aca se menciona se usaron, esta práctica la hice tal cual y alli tienes hasta el video

      Responder

Deja un comentario