Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino
| Actualizado:
Comentarios: 0
Para mostrar más información, como la hora o la temperatura, necesitamos un display de más dígitos o conectar varios display de un solo dígito. En este tutorial veremos cómo conectar un display de 4 dígitos a Arduino.
Contenido
Se trata un display de cátodo común, en el que se puede ver que los pines de cada segmento están compartidos para los 4 dígitos. Por lo que 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.
Material necesario:
- Placa Arduino o compatible.
- Display de 4 dígitos y 7 segmentos.
- 4 resistencias.
- Protoboard.
- Cables de conexión.
Esquema de conexiones.
Los pines digitales D1, D2, D3 Y D4 se conectan a las resistencias, ya que son los terminales de los dígitos.
Código para mostrar un número.
#include "SevSeg.h"
SevSeg sevseg;
void setup(){
byte numDigits = 4;
byte digitPins[] = {10, 11, 12, 13};
byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
bool resistorsOnSegments = true;
bool updateWithDelaysIn = true;
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
}
void loop(){
sevseg.setNumber(5921,3);
sevseg.refreshDisplay();
}
En la función setup() definimos el número de dígitos del display, qué pines de Arduino están conectados a los pines de los dígitos y qué pines lo están a los segmentos.
El número de dígitos del display lo definimos con byte numDigits = 4.
Los dígitos los definimos en byte digitPins[] = {10,11,12,13}, se corresponden con el D1, D2, D3 y D4, en ese orden.
Los pines para los segmentos se definen en byte segmentPins[] = {9,2,3,5,6,8,7,4}, se corresponden con los segmentos A, B, C, D, E, F, G y el punto decimal.
Tabla resumen con las conexiones de los pines del display con la placa Arduino:
Pines display | Pines Arduino |
Segmento E | 6 |
Segmento D | 5 |
Punto decimal | 4 |
Segmento C | 3 |
Segmento G | 7 |
Digito 4 (D4) | 13 |
Segmento B | 2 |
Digito 3 (D3) | 12 |
Digito 2 (D2) | 11 |
Segmento F | 8 |
Segmento A | 9 |
Digito 1 (D1) | 10 |
Para imprimir el número con un punto decimal utilizamos la instrucción sevseg.setNumber(5921,3) donde el primer parámetro es el número y el segundo parámetro dónde colocar el punto decimal.
Código para realizar un contador.
Utilizamos el mismo esquema para realizar el contador.
#include "SevSeg.h"
SevSeg sevseg;
// Variables globales
int Contador = 0; // inicio
int espera =0; // contador espera
int esperamax =1000; // define la velocidad
void setup(){
byte numDigits = 4;
byte digitPins[] = {10, 11, 12, 13};
byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
bool resistorsOnSegments = true;
bool updateWithDelaysIn = true;
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
}
void loop(){
sevseg.refreshDisplay();
sevseg.setNumber(Contador, -1);
// sistema para aumentar el contador y crear un sistema de velocidad
espera = espera +1;
if (espera == esperamax){
espera =0;
Contador = Contador + 1;
}
}
En el código se puede observar que se ha añadido una variable para llevar el contador, otra variable para crear un sistema de espera, y una última que va a ser la encargada de aumentar la velocidad del contador.
En la función loop() podéis ver:
espera = espera +1;
if (espera == esperamax){
espera =0;
Contador = Contador + 1;
}
Este trozo de código, es el encargado de ir aumentando el contador, este será más veloz si disminuimos la variable esperamax. Podéis comprobarlo disminuyendo la variable, por ejemplo a 10. Recordad que la función loop() es un bucle que se repite continuamente, si no colocamos el if, en cada vuelta aumentaría el contador en una unidad.