Objetivos
- Display numérico de 4 digitos.
- Multiplexando los dígitos.
- Aprendiendo a programar: Dividiendo el problema en funciones.
- Operaciones con enteros
Material requerido
|
|
|
|
|
|
|
LOS DISPLAYS LED DE 4 DÍGITOS.
Existen un display de 4 dígitos en el que nosotros tendríamos que montar toda la electrónica.
Funcionaba bastante bien, y no se notaba el truco de multiplexar los dígitos, porque en general los Arduinos son lo suficientemente rápidos para que no lo percibamos.
Pero es muy pesado montar el circuito en una protoboard, por la cantidad de cables que supone conectar y por lo fácil que es equivocarse o soltar uno inadvertidamente.
En la práctica es mucho mejor utilizar un display con sistema anexo de control, que son un poco más caros, pero mucho más fáciles de montar.
En realidad son tan sencillos que no suelen tener más de 4 pines y se controlan por software directamente.
Vamos a ver un display de Catalex, un fabricante chino, de 4 dígitos que se gobierna con 4 pones, dos son Vcc y GND, tiene una librería muy simple y funciona tanto a 5V como a 3,3V.
DIAGRAMA DE CONEXIÓN.
El cableado de uno de estos displays es insultantemente sencillo. Conectamos tensión y Ground y solo nos quedan 2 hilos: DIO o Data y Clock, que conectamos a los pinos 2 y 3 respectivamente. Y eso es todo.
EL PROGRAMA DE CONTROL.
El fabricante del display nos proporciona una librería para que poder simplificar su utilización: TM1637. Una biblioteca Arduino para módulos de visualización de 7 segmentos basados en el chip TM1637, como la pantalla de 4 dígitos Grove de Seeed Studio. El chip TM1637 también tiene capacidad de entrada de teclado, pero no está implementado en esta biblioteca.
En otras entradas ya hemos visto como descargar e instalar una librería: seleccionad Sketch – Incluir biblioteca – gestinar bibliotecas e indicadle la librería a instralar.
Crea un programa e incluye las librerías siguientes:
#include <Arduino.h> #include <TM1637Display.h>
#define CLK 3 #define DIO 2
Ahora tenemos que crear una instancia del tipo TM1637Display que llamaremos display y le pasamos los pines que controlan la comunicación:
TM1637Display display(CLK, DIO);
Y ahora el fabricante nos pide que le pasemos los dígitos a representar en un array de 4 unsigned byte definidos con un tipo raro uint8_t, 2 ejemplos de vectores (lleno y vacio):
uint8_t data[] = {0xff, 0xff, 0xff, 0xff}; uint8_t blank[] = {0x00, 0x00, 0x00, 0x00};
Y ahora hay que inicializar la librería y el display indicando el brillo:
void setup(){ display.setBrightness(0x0f); display.clear(); }
Y ahora ya solo queda pedirle que visualice los vectores:
display.setSegments(data);
delay(2000);
display.clear();
display.setSegments(digitos);
delay(2000);
display.clear();
display.setSegments(blank);
delay(2000);
display.clear()2
Para mostrar números con ceros o sin ceros delante :
display.showNumberDec(0, false); // Expect: ___0 delay(2000); display.showNumberDec(0, true); // Expect: 0000 delay(2000); display.showNumberDec(1, false); // Expect: ___1 delay(2000); display.showNumberDec(1, true); // Expect: 0001 delay(2000); display.showNumberDec(301, false); // Expect: _301 delay(2000); display.showNumberDec(301, true); // Expect: 0301 delay(2000); display.clear();
Y para hacer un contador:
void loop() { // put your main code here, to run repeatedly: for (int i = 0 ; i<10000 ; i++){ display.showNumberDec(i, false); delay(1000); } }