Control de Display 7 Segmentos mediante Pulsadores

En esta experiencia se mostrará cómo lograr el control de display de 7 segmentos mediante pulsadores. Para ello se utilizará botones tipo “push button” los cuales aumentarán y disminuirán la cuenta mostrada en el display, según sea necesario.

 

Una de las maneras más fáciles de controlar cierto tipo de proyecto es mediante el uso de entradas (pulsadores) las cuales nos permiten manipular diferentes componentes. según nuestras necesidades.

Para esta experiencia utilizamos los siguientes componentes:

  • 1 Protoboard.
  • 7 resistencias de 220Ω.
  • 2 resistencias de 4.7kΩ.
  • 1 display de 7 segmentos (cátodo común).
  • Jumpers.
  • 1 Placa Arduino Uno.
  • 2 Pulsadores.

Podemos consultar la información que ya se ha publicado en este sitio web acerca del display de 7 segmentos.

La configuración utilizada para este proyecto es la siguiente.

Control de cuenta mediante pulsadores.
Control de Display 7 Segmentos mediante pulsadores.

R1= 220Ω                   R2=4.7KΩ

El pulsador es un dispositivo electrónico que funciona por lo general como un interruptor eléctrico, es decir en su interior tiene dos contactos, al ser pulsado uno, se activará la función inversa de la que en ese momento este realizando.

Cuando un pin del arduino no está conectado, el valor que nos devuelve la función digitalRead() está indeterminado y puede variar aleatoriamente.

Debido a esto y para garantizar que la función nos devuelva un LOW cuando el botón no este oprimido, debemos poner lo que se conoce como una resistencia pull down, en el lado del botón conectado al pin de entrada. Esta resistencia pull down es una resistencia con un valor alto, usaremos una de 4.7 KOhms, conectada al pin de tierra o GND del Arduino.

Untitled Sketch_bb
Pulsador con resistencia pull-down

De esta manera, cuando el botón está abierto, aseguramos tener un valor de 0 Volts o LOW, dado por la resistencia pull down conectada a tierra y cuando el botón esté cerrado, tendremos un valor de 5 Volts o HIGH. La resistencia pull down evitará que se forme un corto circuito entre el botón y el GND.

Abrimos Arduino IDE y escribimos el siguiente código:

Uno de los problemas o dificultades que presenta el uso de pulsadores es que muchas veces la señal no se comporta de manera limpia como nosotros queremos y esto ocasiona errores en nuestro código; esto pasa porque Arduino ejecuta todo lo que está en la función loop muchas veces, esto lo hace a una velocidad de millones de instrucciones por segundo. Entonces para cuando soltemos el botón no sabemos en qué lugar quedo. Para ello crearemos una función muy importante al momento de trabajar con pulsadores: la función Antirrebote.

En el sketch de este proyecto vamos a hacer uso de la función Antirrebote:

“Una función es un pedazo de código que no está escrito dentro de nuestra sección principal, que sería dentro del loop.”

Una de las maneras de crear un antirrebote es mediante un delay(), sin embargo esta es una manera muy brusca de hacerlo y aun así sigue generando errores.

El siguiente código es una forma concreta de hacer una lectura correcta  al presionar el pulsador. Para ello utilizamos el ciclo do-while.

La variable timeAntirebote es una constante que escribimos al inicio y es el tiempo o la duración que queremos usar para asegurarnos de tener un pulso estable, mientras más grande sea este número más exacto será nuestra función antirrebote(), pero más tiempo necesitaremos para comprobar el estado del pulsador. Un valor entre 10 y 15 nos da una lectura correcta del estado del pulsador.

Otra de las funciones que utilicé en este código fue la de actualizarNumero, en la cual incluí: Registro Port (Puerto) la cual me permitió reducir en gran tamaño el código.

Podemos leer más sobre esto en el siguiente post de Arduino:

Código Utilizado:

Dato Curioso:

Los pines 0 y 1  son la transmisión serial (Rx y Tx respectivamente). Si colocamos en void setup(): “Serial.begin()” y si usamos alguno de esos 2 puertos (como usé en el display), no tiendrás comunicación serial. Esto se debe a que ambos pines son utilizados en el proceso de comunicación serial con la computadora.

En este código utilice arrays (en el cual pude almacenar los diversos números del display).  Para definirlos se utiliza la expresión:

tipo_de_elemento nombre_del_array[número_de_elementos_del_array];
byte numero [10];

Podemos leer sobre esto en el siguiente post:

Con este código podemos controlar los números en el display aumentándolo o disminuyéndolo según nuestra necesidad.

Veamos algunas imágenes del circuito físico:

esquem2
Circuito Físico

Circuito Físico

Circuito Físico

Espero que la información suministrada sea de su utilidad y comprensión.

Saludos.

 

¿Te gustó? ¡Comparte!Share on LinkedInShare on FacebookTweet about this on TwitterEmail this to someoneShare on RedditShare on TumblrShare on Google+Pin on PinterestBuffer this page