Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Abr 25, 2014 in Pantallas LCD/TFT | 0 comments

Display 7 segmentos con controlador y botones

Display 7 segmentos con controlador y botones

8_Dis

Display 8 x 7 segmentos con controlador y botonesdisplay 7 segmentos

DESCRIPCIÓN

En este ejemplo utilizaremos un módulo de displays de 7 segmentos con LEDs y botones. Haremos uso de las funciones que ya existen en la librería TM1638, esta librería será probada con el Arduino Uno. Una vez cargado con el programa el Arduino está estará en espera hasta que se presione un botón del módulo 0. A continuación se mostrara la acción que tomara cada botón del módulo 0:

Botón 1: Imprime el string “hEtPro” en todos los módulos.

Botón 2: Imprime valores Hexadecimales y enciende LEDs en todos los módulos.

Botón 3: Desplegara el string ”       hEtPro    Arduino uno        ” haciendo un recorrido por los módulos

Botón 4: Encendido y apagado del string “hEtPro” en todos los módulos.

Botón 5: Encenderá los LEDs de los módulos  tipo “rotabit”

Botón 6: Sin Acción

Botón 7: Sin Acción

Botón 8: Sin Acción

 

DIAGRAMA ESQUEMÁTICO

disArd1

En la figura anterior se muestra que el Arduino se conecta únicamente al primer módulo, los demás módulos se conectan en cascada a partir de la salida del módulo precedente. Para controlar un  módulo es necesario un solo pin denominado Strobe la cual se describirá más adelante.

MATERIALES

–       Modulo de Display 8 x 7 segmentos con controlador y botones LKM1638

–       1 Arduino Uno

–       Cable USB serial

 

INTRODUCCIÓN

 

MÓDULO DE DISPLAYS DE 7 SEGMENTOS CON BOTONES Y LEDS

DESCRIPCIÓN

El módulo tiene 8 displays, 8 LEDs y 8 botones, utiliza una interfaz de comunicación serial para controlar los LEDs y la lectura de los pushbuttons. El módulo TM1638 ha sido diseñado para poder conectarse en cadena, con una conexión máxima de 6 módulos.

A continuación se muestra una tabla con los pines que dispone un módulo TM1638:

rfid_tabla

disArd2

En las imagines anteriores se muestra la configuración de pines Output e Input como esta rotulo en la parte posterior del módulo.

El pin Strobe es el que nos permite seleccionar el modulo con el cual haremos cualquier función desde leer un botón, encender un LED o imprimir en los displays. Si tiene n módulos necesitas n pines Strobe conectados al Arduino recalcando que el máximo número de Strobes es  de 6.

Para ver la descripción completa de las funciones de TM1638, ingresa a este link https://code.google.com/p/tm1638-library/wiki/Reference

CARACTERISTICAS DEL MODULO DE DISPLAY 8 X 7 SEGMENTOS

Modelo: LKM1638

LEDs: 8

Botones: 8

Displays: 2×4

Cable: 20 cm

Controlador: TM1638

 

PROGRAMA EN C PARA ARDUINO UNO

/*Ejemplos de Biblioteca para TM1638 

Este programa es software es libre: puedes redistribuirlo y/o modificarlo bajo los términos de la versión 3
GNU General Public License publicado por la Free Software Foundation.

Este programa es distribuido con la esperanza de que sea útil, pero
SIN GARANTIA ALGUNA.
*/

//Incluye librería TM1638, la cual contiene funciones para controlar los displays, LEDs y botones del LKM1638
#include <TM1638.h>   

//Define entero que representa el número de módulos (tarjetas LKM1638)
#define MODULES 4    

TM1638 modules[] = {
	TM1638(8, 9, 7),
	TM1638(8, 9, 6),
	TM1638(8, 9, 5),
	TM1638(8, 9, 4)
};

void setup() {

}

// Declaración de un arreglo de caracteres
const char string[] = "       hEtPro    Arduino uno        ";
//Declaración de enteros
int base = 0;
int LED=0;
int i = 0;

 void loop() {

  //Verifica si se presionó un botón en el módulo 0
  switch(modules[0].getButtons()){

    case 0x01: //Impresión de cadena de caracteres

        //For principal en caso de presionar el botón 1
       for (int i = 0; i < MODULES; i++) {
         //For utilizado para apagar los LEDs de todos los módulos
         for (int x = 0; x < 7; x++) {
              modules[i].setLED(TM1638_COLOR_NONE, x);
          }
         //Función de TM1638.h que limpia los displays
        modules[i].clearDisplay();
        //Función de TM1638.h que imprime en los displays una cadena de caracteres
        modules[i].setDisplayToString("hEtPro");
       }
    break;

    case 0x02: //Impresión de valores Hexadecimales

        for (int i = 0; i < MODULES; i++) {
          //Función de TM1638.h que limpia los displays
          modules[i].clearDisplay();
          //Función de TM1638.h que imprime en los displays valores HEXA
          modules[i].setDisplayToHexNumber(0x15918740, 0b01010101);  //Valor en binario utilizado para encender los puntos de los displays
          //Función de TM1638.h que permite encender los LEDs que desees
          modules[i].setLEDs(0b10101010);
         }      

    break;

    case 0x04: // Recorrido de cadena de caracteres a través de los 4 módulos

        //For dedicado a recorrer la cadena a través de los módulos
        for (int i = 0; i < MODULES; i++) {
       //For utilizado para apagar los LEDs de todos los módulos
         for (int x = 0; x < 7; x++) {
              modules[i].setLED(TM1638_COLOR_NONE, x);
          }

          const char* pos = string + base + (i * 8);

          if (pos >= string && pos + 8 < string + sizeof(string)) {
              modules[i].setDisplayToString(pos);
          }
          else {
            modules[i].clearDisplay();
          }
         }

  base++;

  if (base == sizeof(string) - 8) {
    base = -MODULES * 8;
  }

  delay(100);
    break;

     case 0x08: //Encendido y apagado de string

        for (int i = 0; i < MODULES; i++) {
          modules[i].clearDisplay();
          //For utilizado para apagar los LEDs de todos los módulos
          for (int x = 0; x < 7; x++) {
              modules[i].setLED(TM1638_COLOR_NONE, x);
          }
          //Función de TM1638.h que imprime en los displays una cadena de caracteres
          modules[i].setDisplayToString("hEtPro");
          //Retardo de 300 milisegundos
          delay(300);
          //Función de TM1638.h que limpia los displays
          modules[i].clearDisplay();
          //Retardo de 300 milisegundos
          delay(300);
        }

    break;

    case 0x10:      //Rotabit

                    if (LED==0){
                      //Función de TM1638.h que enciende LEDs
                      modules[i].setLEDs(0b00000000 );
                      delay(100);
                    }
                    if (LED==1){

                      modules[i].setLEDs(0b00000001 << 8);
                      delay(100);
                    }
                    if (LED==2){

                      modules[i].setLEDs(0b00000011 << 8);
                      delay(100);
                    }
                    if (LED==3){

                      modules[i].setLEDs(0b00000111 << 8);
                      delay(100);
                    }
                    if (LED==4){

                      modules[i].setLEDs(0b00001111 << 8);
                      delay(100);
                    }
                    if (LED==5){

                      modules[i].setLEDs(0b00011111 << 8);
                      delay(100);
                    }
                    if (LED==6){

                      modules[i].setLEDs(0b00111111 << 8);
                      delay(100);
                    }
                    if (LED==7){

                      modules[i].setLEDs(0b01111111 <<8);
                      delay(100);
                    }
                    if (LED==8){
                      modules[i].setLEDs(0b111111111 <<8);
                      delay(100);

                      //apagar los LEDs cuando LED llegue al valor de 8
                      for (int x = 0; x < 8; x++) {
                        modules[i].setLED(TM1638_COLOR_NONE, x);
                      }
                      //Cuando llegue a ser 8 el int LED se le asigna 0
                      LED=0;

                      //Aumenta en 1 a i
                      i++;
                    } 

                    //Si i llega a 4 se asigna un 0 para que inicie de nuevo en el módulo 0
                    if (i==4){
                      i=0;
                    }
                    LED++;
  }

}

 

DETALLES DE PROGRAMA

#include <TM1638.h>

Incluye librería TM1638, la cual contiene funciones para controlar los displays, LEDs y botones del LKM1638

<pre>#define MODULES 4    

Define variable global que representa el número de módulos (tarjetas LKM1638)

TM1638 modules[] = {
	TM1638(8, 9, 7),
	TM1638(8, 9, 6),
	TM1638(8, 9, 5),
	TM1638(8, 9, 4)
};

Se declara esta estructura que contiene los módulos y los valores entre paréntesis corresponden a los pines de Arduino a utilizar (DATA=PIN 8, CLOCK=PIN 9 y STROBE=PIN 7)

switch(modules[0].getButtons())

Dentro del loop() se encuentra este switch, el cual verificara si se ha presionado un boton en el módulo 1. Saltara a hacer una operación según sea el caso.

 

const char* pos = string + base + (i * 8);

          if (pos >= string && pos + 8 < string + sizeof(string)) {
              modules[i].setDisplayToString(pos);
          }
          else {
            modules[i].clearDisplay();
          }

 

Esta parte de código del caso 0x40 es la que hace el recorrido de cadena, se define el carácter de tipo puntero “pos”, el valor de este char* es el de la posición que tomara en el display.

 

Si “pos” es menor o igual a la cadena y “pos”+ 8 es menor al tamaño de la cadena mas la cadena, entonces se imprimirá el char* en el módulo actual “i”. Si no es así, se limpia el display del módulo actual “i”.

 

disArd6

 

disArd5

disArd4

disArd3

 

 

Esta tutorial es propiedad de HeTPro. Queda expresamente prohibida la reproducción total o parcial por cualquier medio o soporte de los contenidos de esta publicación sin la autorización expresa del editor, cualquier duda, sugerencia o permiso para redistribuir el material favor de mandar un correo a contacto@hetpro.com.mx

 

Si la redistribución de este material es para fines educativos, difusión tecnológica o cualquier otro fin sin lucro, HeTPro está de acuerdo en que el material sea distribuido sin la necesidad de requerir el permiso del autor.

 

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *