Taller de Arduino Display 7 Segmentos
Taller de Arduino Display 7 Segmentos
Taller de Arduino Display 7 Segmentos
Segmento a - pin 7
Segmento b - pin 8
Segmento c - pin 9
Segmento d - pin 10
Segmento e - pin 11
Segmento f - pin 12
Segmento g - pin 13
Display de 7 segmentos
Display de 7 segmentos
Vamos a realizar un ejemplo en el cual nuestro display irá mostrando de forma ascendente todos los
números con un intervalo de separación de 1 segundo.
int pausa=1000; // Variable que define el intervalo
// de tiempo entre cada digito
void setup()
{
pinMode(7, OUTPUT); // Asignación de las salidas digitales
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
Display de 7 segmentos
void display (int a, int b, int c, int d, int e, int f, int g)
// Funcion del display
{
digitalWrite (7,a); //Se reciben 7 variables y se asignan
digitalWrite (8,b); //a cada una de las salidas
digitalWrite (9,c);
digitalWrite (10,d);
digitalWrite (11,e);
digitalWrite (12,f);
digitalWrite (13,g);
}
Display de 7 segmentos
void loop() //Funcion principal
// Dependiendo de cada dígito, se envía a la función display
// los estados (0 y 1) a cada uno de los segmentos
{
display (1,1,1,1,1,1,0); //escribe 0
delay(pausa);
display (0,1,1,0,0,0,0); //escribe 1
delay(pausa);
display (1,1,0,1,1,0,1); //escribe 2
delay(pausa);
display (1,1,1,1,0,0,1); //escribe 3
delay(pausa);
Display de 7 segmentos
display (0,1,1,0,0,1,1); //escribe 4
delay(pausa);
display (1,0,1,1,0,1,1); //escribe 5
delay(pausa);
display (1,0,1,1,1,1,1); //escribe 6
delay(pausa);
display (1,1,1,0,0,0,0); //escribe 7
delay(pausa);
display (1,1,1,1,1,1,1); //escribe 8
delay(pausa);
display (1,1,1,0,0,1,1); //escribe 9
delay(pausa);
}
Dado electrónico
Componentes necesarios para el dado electrónico
Arduino UNO
Protoboard (placa de prototipado)
Cables para hacer conexiones
1 pulsador
1 resistencia de 10 kΩ
1 resistencia de 220 Ω
1 display de 7 segmentos
Dado electrónico
Cátodo Común Ánodo Común
Dado electrónico
Programando el dado eléctrico con el display 7 segmentos
Comenzamos con la programación. En términos de lógica, da lo mismo tener un display 7 segmentos en
configuración de cátodo común que ánodo común. Donde si que encontraremos diferencias es a la hora de
implementar la lógica.
Comenzaremos con el algoritmo, una breve descripción de los pasos que debemos seguir. Es recomendable
plantear las ideas antes de ponerse a programar.
Leemos el pulsador
Si está en estado alto
Obtenemos número aleatorio
Mostramos el número en el display
Esperamos un tiempo hasta permitir otra jugada
Si está en estado bajo
No hacemos nada
Es un código muy sencillo. Quizás, donde encontremos más dificultad, sea a la hora de mostrar los números
en el display. Eso lo veremos ahora.
Dado electrónico
Variables y constantes
Comenzamos con una buena práctica. Declarar todas las constantes que relacionan los
pines con los componentes. En este caso solo vamos a declarar una constante, el pulsador.
// Constantes pines
#define PULSADOR 10
Para los pines del display 7 segmentos, vamos a utilizar un array multidimensional. Lo
primero es saber qué es un array o matriz. Este tipo de variables nos permite agrupar
datos del mismo tipo.
Cuando hablo de array multidemensional, quiero decir que tendremos un array de arrays.
Es sencillo, cada elemento del array principal es otro array. En este caso tendremos
profundidad de 2, pero podríamos tener más profundidad.
Este tipo de arrays, donde tenemos 2 dimensiones, lo podemos ver como una tabla. Para
acceder a un elemento tenemos que indicar la fila y la columna donde se encuentra dicho
elemento. Esto viene indicado por el valor entre corchetes [columna] [fila].
Dado electrónico
En este caso crearemos un array con 10 elementos que serían los 10 números posibles, del 0 al 9. Cada
elemento contendrá 1 array de 8 elementos que serían los pines a los que está conectado el display de 7
segmentos (7 para cada segmento y el punto).
Como semilla, elegir un pin analógico que no se utilice. Con el pulsador, no establecer una
resistencia pull down o pull up produce una indeterminación. Esto nos permitirá
seleccionar un número aleatorio verdadero.
Dado electrónico
Función loop
Ahora vamos con la parte que se repite constantemente. Como hemos visto en la descripción del
algoritmo, lo primero es leer el pin digital donde tenemos conectado el pulsador. Luego
comprobamos si está en estado alto (pulsado).
void loop() {
// Leemos el valor del pulsador
int valor = digitalRead(PULSADOR);
// Si está pulsado
if (valor == HIGH)
{
Una vez que estemos seguro que se ha pulsado es cuando empezamos la secuencia de obtener un
número aleatorio entre 1 y 6, con la función random, y mostramos el número que ha salido. La
función random(min, max) admite dos parámetros el mínimo y el máximo.
Dado electrónico
Este máximo es exclusivo lo que quiere decir que debemos elegir el número entero superior al número máximo
que queremos elegir. En nuestro caso sería random(1,7) para elegir un número entre 1 y 6.
//Genera un numero aleatorio entre 1 y 6
int randomNumber = random(1, 7);
delay(500);
}
}
Dado electrónico
Voy a describir el funcionamiento del bucle. Al final, para mostrar un número en el display,
lo que tenemos que hacer es encender un LED y apagar los demás.
Por ejemplo, si queremos encender el número 1, tenemos que ir al elemento 1 (recuerda
que antes hay otro elemento que es el elemento 0. Será el array con 8 valores).
{ 0, 1, 1, 0, 0, 0, 0, 0 }
El primer elemento indica el primer LED (corresponde con la letra e y el pin 2). Por lo tanto,
el pin 2 al valor que nos indica el array, 0 V (LOW).
El siguiente elemento es el pin 3 (letra c), lo tenemos que poner a nivel alto 5 V (HIGH). Y
así con todos los elementos.
El orden nos dirá el pin (hay que sumar dos ya que hemos empezado a conectar por el pin
2) y el valor nos dirá en que estado 0 (LOW) y 1 (HIGH).