viernes, 4 de abril de 2014

Arduino Tutorial 18: Control de un Display de 7 segmentos

En esta práctica de hoy, vamos a volver al uso de la tarjeta micro-controladora Arduino, y para introducir otras prácticas queremos presentaros hoy el control de un Display de 7 segmentos.

Este es un elemento muy simple que se puede manipular con otro tipo de circuitos integrados, pero como queremos ir avanzando el uso de matrices, displays y elementos de control como quizás multiplexores, hemos ido pensando en ir desarrollando algo introductorio.

Aún así creo que es una práctica perfecta para recordar todo lo que habíamos aprendido del manejo de leds en Arduino, y para refinar nuestro entendimiento del código.

Os escribo con Fritzing el montaje a realizar en la placa de pruebas



Como veis, el montaje es bastante sencillo, únicamente señalar por si no se entiende bien, que el cable naranja que conecta el pulsador se conecta al pin digital 2, y que el tercer pin de la parte de arriba del display lleva una resistencia de 220 ohmios a masa directamente, lo único que la arquitectura del programa no me permitía llevarla directamente.

Con esta práctica estaríamos simulando el funcionamiento de un marcador, ya fuera de un estadio, de un reloj digital, etc. Como vemos, lo único que necesitamos es realizar una entrada como orden que haga subir en un dígito la cuenta. 

El funcionamiento con dos dígitos sería similar, sólo habría que indicarle al primer display que cuando la cuenta llegara a una decena, el número nueve se cambiara a cero, y en el segundo display añadir un uno.

También podríamos colocar un segundo pulsador que hiciera el proceso inverso y en vez de sumar números los reste. Se deja como ejercicio para el interesado.

Vamos a añadir un vídeo de su funcionamiento básico:



Os dejamos con el código a continuación. Destacar el parámetro que lleva la cuenta de pulsaciones, y la llamada a la función display que asigna a cada pin el valor de uno de las barras de led que iluminan al display:

int pausa=200; // Variable que define el intervalo
                // de tiempo entre cada digito
int button = 2;
int buttonState = 0;
int cuenta = 0;
int i = 0;

void setup()
{
  pinMode(button, INPUT); //Asignación de entradas digitales
  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);
}

void display (int a, int b, int c, int d, int e, int f, int g)
// Funcion que interpreta cada pin digital como una de las barras del led: a,b,c..
{
  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);
}

void loop() 

{
   buttonState = digitalRead(button); //lectura del estado del pulsador
  if (buttonState == HIGH)
  {
    cuenta == cuenta++; //la cuenta de pulsaciones se almacena en una variable
  }

    if (cuenta == 0)
    {
      display (1,1,1,1,1,1,0); //escribe 0
      delay(pausa);
    }
    else if (cuenta == 1)
    {
      display (1,0,1,0,0,0,0); //escribe 1
      delay(pausa);
    }
    else if (cuenta == 2)
    {
      display (1,1,0,1,1,0,1); //escribe 2
      delay(pausa);
    }
    else if (cuenta == 3)
    {
      display (1,1,1,1,0,0,1); //escribe 3
      delay(pausa);
    }
    else if (cuenta == 4)
    {
      display (1,0,1,0,0,1,1); //escribe 4
      delay(pausa);
    }
    else if (cuenta == 5)
    {
      display (0,1,1,1,0,1,1); //escribe 5
      delay(pausa);
    }
    else if (cuenta == 6)
    {
      display (0,1,1,1,1,1,1); //escribe 6
      delay(pausa);
    }
    else if (cuenta == 7)
    {
      display (1,1,1,0,0,0,0); //escribe 7
      delay(pausa);
    }
    else if (cuenta == 8)
    {
      display (1,1,1,1,1,1,1); //escribe 8
      delay(pausa);
    }
    else if (cuenta == 9)
    {
      display (1,1,1,0,0,1,1); //escribe 9
      delay(pausa);
    }

}

//Espero que os haya gustado, nos vemos muy pronto con nuevas prácticas de Arduino y de Raspberry Pi.