Arduino y displays de 7 Segmentos


Esta es la primera entrada que hago con un proyecto hecho con Arduino. Se trata de algo sencillo, un contador con dos displays de 7 segmentos. Sin embargo, no se puede conectar directamente dos displays al Arduino puesto que no hay pines suficientes para accionar directamente todos los LEDs de los displays, utilizaremos, entonces, un conversor BCD a 7 segmentos (7447) con lo que solo necesitaremos ocho pines del Arduino.

Pero vayamos por pasos. Primero programaremos el Arduino y comprobaremos que nuestro código funciona y después implementaremos todo en el circuito final.

Sabemos que el Arduino no puede representar los números en formato decimal por lo que tendremos que utilizar algo más básico como es el binario. Con el código binario podemos representar con ceros y unos los números que nos interesa representar. La siguiente tabla muestras esos números desde el 0 hasta el 9

0       0000
1       0001
2       0010
3       0011
4       0100
5       0101
6       0110
7       0111
8       1000
9       1001

¿Por qué hasta el 9? Pues porque el número mas alto que puede representar un display de 7 segmentos es precisamente 9.

El codigo que tenemos que escribir constará básicamente de un contador de unidades que cuando llegue a 9 sume uno a las decenas y una función que hará esa representación de números binarios.

El código seria el siguiente:

//Primero declaramos dos puertos de cuatro pines, uno para cada dígito

int arrayOne [] = {2,3,4,5};
int arrayTwo [] = {6,7,8,9};


//Después indicamos que esos pines son SALIDAS usando un bucle for


void setup()
{
for (int pin = 0; pin < 4; pin++)
  {
  pinMode(arrayOne[pin], OUTPUT);
  pinMode(arrayTwo[pin], OUTPUT);
  }
}

//A continuación viene el contador. counter2 cuenta las unidades y cuando llega
//a 9 cuenta uno en el contador counter1, que es el de las decenas

void loop()
{
for ( int counter1 = 0; counter1 <= 9; counter1++)
  {
  displayBinary1(counter1);
  for ( int counter2 = 0; counter2 <= 9; counter2++)
    {
    displayBinary(counter2);
    delay(300);
    }
  }
}


//displayBinary es la función que representa los números binarios

//Se tendrá que repetir la función una vez por cada dígito que tengamos
//Cambiando lo que fuera necesario en cada caso

void displayBinary(byte numToShow)
{
  for (int i = 0; i < 4; i++)
  {
    if (bitRead(numToShow, i)==1)
    {
      digitalWrite(arrayOne[i], HIGH);
    }
    else
    {
      digitalWrite(arrayOne[i], LOW);
    }
  }
}
//We'll have to do it twice. One for each array
void displayBinary1(byte numToShow1)
{
  for (int x = 0; x <4 data-blogger-escaped-br="" data-blogger-escaped-x="">   {
    if (bitRead(numToShow1, x)==1)
    {
      digitalWrite(arrayTwo[x], HIGH);
    }
    else
    {
      digitalWrite(arrayTwo[x], LOW);
    }
  }
}


NOTA:
La funcion displayBinary la he obtenido del vídeo en este enlace


Una vez comprobado que el código funciona correctamente lo implementamos en el circuito. Para ello debemos acudir al datasheet del conversor BCD a 7 segmentos, el circuito integrado 7447 y al datasheet del display de 7 segmentos de ánodo común. Con ello, acabaremos desarrollando este circuito:


Por último, os pongo el enlace al vídeo de mi canal donde se ve el funcionamiento del código y el circuito:



No hay comentarios :

Publicar un comentario