miércoles, 9 de marzo de 2016

Encender cada segmento del módulo TM1637

Cómo encender cada segmento del módulo TM1637

https://fabricadigital.org/leccion/como-encender-cada-segmento-del-modulo-tm1637/

Conexión

Este display 7 segmentos tiene dos hilos para alimentación, GND y VCC (que puede ser 5V o 3.3V), y dos pines de datos (CLK y DIO) que podemos conectar a los pines digitales de Arduino que queramos. En los ejemplos siguientes vamos a conectar CLK al pin digital 2 de Arduino, y DIO al pin digital 3.
TM1637 esquema-conexion

Instalación de librería

Para utilizar el chip TM1637 tenemos que instalar una librería en Arduino IDE. Descarga la librería (enlace directo), abre Arduino IDE y ve a Programa > Include Library > Add .ZIP Library, busca el archivo descargado y selecciónalo.

Encendiendo segmentos

Esto se pone interesante. Vamos a ver cómo se encienden los segmentos del display TM1637.
1.En Arduino IDE > Programa > Include Library > TM1637-master
2. Definimos las variables CLK y DIO:
const int CLK = 2;
const int DIO = 3;
3. Instanciamos el TM1637. Para ello creamos un objeto indicando en su constructor los pines a los que CLK y DIO están conectados.
TM1637Display display(CLK, DIO);
4. Creamos una variable byte de tipo array para encender cada uno de los segmentos de los dígitos. Un dígito de un display 7 segmentos tiene etiquetados cada uno de sus segmentos como muestra la imagen siguiente:
Dígito de display 7 segmentos con etiquetas
¿Cómo funcionan estas variables? Existen varias formas de crear variables de tipo array, la que vamos a usar contiene el tamaño y su valor. Es decir, vamos a crear una variable de tamaño 8 bytes y cada byte tendrá un valor. ¿Qué valores serán?
Segmento A 00000001
Segmento B 00000010
Segmento C 00000100
Segmento D 00001000
Segmento E 00010000
Segmento F 00100000
Segmento G 01000000
Además, algunas pantallas 7 segmentos incluyen un octavo representando separadores (como puntos o dos puntos) u otros símbolos que se iluminan con el bit 10000000.
¿Probamos iluminar nuestro display 7 segmentos TM1637? Vamos a representar la palabra “HOLA”
Para hacer la letra H necesitamos iluminar los segmentos B, C, E, F, G. Para hacer la letra O necesitamos los segmentos A, B, C, D, E, F, y así con el resto de las letras. De forma que nuestra variable byte HOLA queda así:
byte HOLA[] = {
0b01110110, // H
0b00111111, // O
0b00111000, // L
0b01110111  // A
};
Para mayor comodidad, la librería que estamos usando incluye las siguientes macros que facilitan el trabajo con los segmentos:
 #define SEG_A 0b00000001
#define SEG_B 0b00000010
#define SEG_C 0b00000100
#define SEG_D 0b00001000
#define SEG_E 0b00010000
#define SEG_F 0b00100000
#define SEG_G 0b01000000
De esta forma, si queremos representar un HOLA, podemos hacer una OR de cada uno de los segmentos y almacenar el resultado en el byte de datos:
byte HOLA[] = {
SEG_B | SEG_C | SEG_E | SEG_F | SEG_ G,            // H
SEG_A | SEG_B | SEG_C | SEG_E | SEG_F,             // O
SEG_D | SEG_E | SEG_F,                             // L
SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_ G     // A
};
¡Puedes usar cualquiera de las dos formas, la que te resulte más cómoda!
Ya solo nos queda mostrar los datos en la pantalla. Para ello vamos a usar las siguientes funciones:
display.setBrightness(); podemos definir la intensidad de brillo del display, desde un valor hexadecimal 0x00 (0 en decimal), hasta un brillo máximo 0x0f (15 en decimal). En el paréntesis podremos el valor del brillo, por ejemplo, 0x0f
display.setSegments(); recibe el array de dígitos a encender en “formato segmento”, y los muestra por pantalla. En el paréntesis pondremos qué queremos mostrar, en nuestro caso, la variable array HOLA.
El código completo nos quedaría así:
/**
* Ejemplo de mensaje en display TM1637 con Arduino iluminando cada segmento de cada dígito
* Copyright 2016 - Fábrica Digital (fabricadigital.org)
*
* Publicado bajo licencia CC-BY-SA 4.0
* Creative Commons: Reconocimiento - Compartir Igual 4.0 Internacional
* http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES
*
* Modificado el 15 de enero de 2016
* por Eloísa Romero para Fábrica Digital
*/
#include <TM1637Display.h> // librería TM1637
const int CLK = 2; // el pin CLK está conectado al pin digital 3
const int DIO = 3; // el pin DIO está conectado al pin digital 2
TM1637Display display(CLK, DIO); //instanciamos el TM1637, creando un objeto
byte HOLA[] = {
0b01110110, // H
0b00111111, // 0
0b00111000, // L
0b01110111 // A
};
void setup() {
display.setBrightness(0x0f); // brillo
}
void loop() {
display.setSegments(HOLA); // muestra la variable byte HOLA
}
view rawHOLA_TM1637.ino hosted with ❤ by GitHub
Y si hemos usado las variables SEG_ definidas en la librería, el código sería:
/**
* Ejemplo de mensaje en display TM1637 con Arduino usando las variables SEG_ para iluminiar los segmentos
* Copyright 2016 - Fábrica Digital (fabricadigital.org)
*
* Publicado bajo licencia CC-BY-SA 4.0
* Creative Commons: Reconocimiento - Compartir Igual 4.0 Internacional
* http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES
*
* Modificado el 15 de enero de 2016
* por Eloísa Romero para Fábrica Digital
*/
#include <TM1637Display.h> // librería TM1637
const int CLK = 2; // el pin CLK está conectado al pin digital 3
const int DIO = 3; // el pin DIO está conectado al pin digital 2
TM1637Display display(CLK, DIO); //instanciamos el TM1637, creando un objeto
byte HOLA[] = {
SEG_B | SEG_C | SEG_E | SEG_F | SEG_G, // H
SEG_A | SEG_B | SEG_C | SEG_E | SEG_F, // O
SEG_D | SEG_E | SEG_F, // L
SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G // A
};
void setup() {
display.setBrightness(0x0f); // brillo
}
void loop() {
display.setSegments(HOLA); // muestra la variable byte HOLA
}

No hay comentarios :

Publicar un comentario