En esta ocasión os quiero compartir el esquema de conexión de un display de 4 dígitos y 7 segmentos. Dicha conexión la realizamos con un registro de desplazamiento, el 74HC595, dicho módulo nos evite tener que conectar los 12 pines al Arduino y con solo tres de pines a la placa controlamos los 7 segmentos.
Por otro lado, conectamos directamente los cables de cada uno de los dígitos a la placa mediante una resistencia de 330ohm.
Al trabajar con dicho componente no podemos usar la instrucción usar la instrucción “delay()” ya que no nos funcionaria correctamente, con lo cual debemos hacer comprobaciones con la instrucción “millis()” o hacer otro método para provocar un retardo.
Dicha librería nos permite varias cosas que hacer con el display, como, por ejemplo: usar el mismo código para un módulo de Ánodo o Cátodo, controlar la intensidad de los leds, indicándole que punto es el decimal, etc.
Esquema de conexión:
Aplicación:
/*
* Autor: Josep Martinez Tejedor
* Fecha: 21 de febrero de 2022
* Web: josepmt.com
*/
SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP, 1, true);
void setup() {
byte numDigits = 4;
byte digitPins[] = {9, 10, 11, 12}; // Aquests són els PIN de la ** Arduino **
byte segmentPins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // Aquests són els PIN de la ** del registo e desplazamiento **
bool resistorsOnSegments = false; //'falso' significa que las resistencias están en pines de dígitos
byte hardwareConfig = COMMON_ANODE; // Ver README.md para opciones
bool updateWithDelays = false; // Por defecto 'falso' es Recomendado
bool leadingZeros = false; // Use 'true' si desea mantener los ceros iniciales
bool disableDecPoint = false; // Use 'true' si su punto decimal no existe o no está conectado. Luego, solo necesita especificar 7 segmentPins[]
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(20); // Intensiad de los leds hasta 90
}
void loop() {
static unsigned long tiempoejec=millis()+100; //proximo evento
static int contador=0;
if(millis()>=tiempoejec){
tiempoejec+=100; //proximo evento
contador++;
if(contador==10000){
contador=0; //reseteamos contador
}
sevseg.setNumber(contador,1); // El segundo parámetro indica la posición del punto decimal.
}
sevseg.refreshDisplay();
}
/*
* Autor: Josep Martinez Tejedor
* Fecha: 21 de febrero de 2022
* Web: josepmt.com
*/
SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP, 1, true);
void setup() {
byte numDigits = 4;
byte digitPins[] = {9, 10, 11, 12}; // Aquests són els PIN de la ** Arduino **
byte segmentPins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // Aquests són els PIN de la ** del registo e desplazamiento **
bool resistorsOnSegments = false; //'falso' significa que las resistencias están en pines de dígitos
byte hardwareConfig = COMMON_CATHODE; // Ver README.md para opciones COMMON_CATHODE COMMON_ANODE
bool updateWithDelays = false; // Por defecto 'falso' es Recomendado
bool leadingZeros = false; // Use 'true' si desea mantener los ceros iniciales
bool disableDecPoint = false; // Use 'true' si su punto decimal no existe o no está conectado. Luego, solo necesita especificar 7 segmentPins[]
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(20); // Intensiad de los leds hasta 90
}
void loop() {
static unsigned long tiempoejec=millis()+100; //proximo evento
static int contador=0;
if(millis()>=tiempoejec){
tiempoejec+=100; //proximo evento
contador++;
if(contador==10000){
contador=0; //reseteamos contador
}
sevseg.setNumber(contador,1); // El segundo parámetro indica la posición del punto decimal.
}
sevseg.refreshDisplay();
}
Descarga de la libreria:
SevSegShift-ShiftRegister: Descargas