ARDUINO PRÁCTICA 6. Conteo regresivo con un visualizador de 7 segmentos
Materiales y Métodos:
- Un visualizador LED de 7 segmentos.
- Dos resistencias de 220Ω.
- Una tarjeta Arduino.
- Un cable USB impresora.
- Un computador.
- Cables para el montaje del circuito.
- Protoboard.
Note que en la práctica se emplea un visualizador que consiste en un circuito constituido por 7 LEDs. El número a visualizar se consigue encendiendo y apagando cada LEDs. Por ejemplo, el número 8 se muestra cuando los 7 LEDs están encendidos.
Si recordamos de la práctica 1, 1 LED tiene dos puntas, una el anodo (+) y el catodo (-). El caso del viualizador de 7 segmentos hay dos modelos. Uno donde el catodo de cada segmento van a un punto común, y otro donde los anodos se encuentran en un punto común. Esto es importante conocerlo por que en función del tipo de visualizador el circuito cambia.
El circuito de la figura 1 corresponde con el circuito donde el catodo es común. Un GND (-) común para los 4 LEDs superiores y un GND (-) común para los 3 LEDs inferiores. Aunque la señal enviada por la tarjeta arduino es baja y puede conectarse directamente a los LEDs, es recomendable incluir una resistencia eléctrica tal y como se muestra en la figura
Para encender los segmentos, lo que se debe hacer es enviar la señal digital desde la tarjeta arduino al pin anodo del LED. La tabla 1 resume la secuencia de LEDs que debe encenderse, para el visualisador de catodo común, para mostrár uno de los números de 0 a 9. La tabla indica la variable que hay que activar la cual toma el nombre de la usada en el código. Por ejemplo, led2 es la variable constante y entera usada para activar el LED horizontal superior.
Procedimiento de cómo llevar a cabo el codificado del programa:
Primero vamos a crear la subrutina funcNum(int x) que dado el número requerido (x entero) enciende la secuencia de LEDs indicada en la tabla 1.
- Las subrutinas se codifican en una estructura void seguida del nombre que se le quiera asignar. por ejemplo void funcNum(int x). Dentro del paréntesis se pueden colocar las variables que entran a la función. En este caso la variable de entrada es el número que se quiere visualizar.
- En esta práctica introducimos una nueva estructura de programación switch. Las estructura tiene la ventaja que en función del valor indicado, interamente la función escoge el segmento de código del valor indicado. En este caso hay 10 posibilidades, desde 0 a 9. Por ejemplo, si la entrada x= 9 el código va al case 9 en el cual mediante digitalWrite(led, HIGH) se van encendiendo la secuencia requerida para visualizar el número 9..
Código Principal.
- Se declaran los pines a utilizar para enviar la señal a cada segmento LED. Se declara que son parámetros de tipo constante y entero. Por ejemplo const int led2=2 indica que el pin 2 envía señal al led2.
- En el lazo void setup, se indica que todos los pines utilizados serán utilizados para enviar señal. Esto se realiza mediante pinMode de salida OUTPUT.
- Dentro del lazo void loop, se emplea la rutina de visualizar el número funcNum(int x). Para esta práctica empleamos un lazo for desde i=9 hasta 0 para ir visualizando los números en conteo regresivo. Luego de visualizar el número se introduce un delay de 1 segundo.
ESTE ES EL CÓDIGO:
int const led2=2;
int const led3=3;
int const led4=4;
int const led5=5;
int const led6=6;
int const led7=7;
int const led8=8;
void setup(){
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
pinMode(led7,OUTPUT);
pinMode(led8,OUTPUT);
}
void loop(){
for(int i=9;i>-1; i--){
funcNum(i);
delay(1000);
}
}
void funcNum(int x){
switch (x){
case 0:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case 1:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
break;
case 2:
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case 3:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case 4:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
break;
case 5:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
break;
case 6:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
break;
case 7:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case 8:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
break;
case 9:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
break;
}
}
Comentarios
Publicar un comentario