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 */ #include <SevSegShift.h> #define SHIFT_PIN_SHCP 6 #define SHIFT_PIN_STCP 5 #define SHIFT_PIN_DS 4 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 */ #include <SevSegShift.h> #define SHIFT_PIN_SHCP 6 #define SHIFT_PIN_STCP 5 #define SHIFT_PIN_DS 4 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