En esta entrada vamos a introducir el uso de un display de 7 segmentos de 4 dígitos, como el usado frecuentemente en los relojes despertadores, tal y como se aprecia en el video:

 

Las características del display se muestran en la siguiente imagen.

Display 7 segmentos

 

Como se muestra en el esquema, se trata de un display de ánodo común. Además se puede ver que los pines de cada segmento están compartidos para los 4 dígitos. Por tanto, para poder mostrar un número de 4 dígitos es necesario multiplexar la señal, es decir, iluminar secuencialmente cada uno de los dígitos en una sucesión muy rápida, creando la ilusión de que todos los dígitos están encendidos a la vez.

Afortunadamente de todo esto se encarga una librería de Arduino, llamada SevSeg, por lo que lo único que debemos decirle son los pines utilizados, y el número que queremos mostrar.

En el siguiente código mostramos la implementación de un contador de 0 a 100 segundos, con una precisión de centésimas de segundo.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "SevSeg.h"
 
// Inicializa el display
SevSeg display_4digitos;
 
// Variables globales
unsigned long Temporizador;
int Contador = 0;
 
void setup() {
  //I am using a common anode display, with the digit pins connected
  //from 2-5 and the segment pins connected from 6-13
  display_4digitos.Begin(1,                // Ánodo común = 1
                         10,11,12,13,      // Pines de los dígitos
                         2,3,4,5,6,7,8,9); // Pines para los 7 segmentos
 
  // Define la luminosidad de 0 a 100
  display_4digitos.Brightness(90);
 
  // Inicializa el contador
  Temporizador = millis();
}
 
void loop() {
  // Produce una salida en el display
  display_4digitos.PrintOutput();
 
  // Comprueba si han pasado 10ms
  unsigned long valor = millis();
  if (valor - Temporizador >= 10) {
    Temporizador = valor;
    Contador++;
    // Resetea le contador al llegar a los 100 segundos
    if (Contador == 10000) Contador = 0;
    // Actualiza el número mostrado, con el punto decimal
    display_4digitos.NewNum(Contador, 2);
  }
}