#13 CONTROLANDO UN DISPLAY 7 SEGMENTOS

Introducción

Los controles remotos en la actualidad emiten señales infrarrojas por medio de un LED especial llamado LED infrarrojo. Estás señales viajan por el aire y llegan al dispositivo que lo recibe por medio de un receptor infrarrojo, el cual decodifica la señal y toma una decisión según la señal que se haya recibido. Un ejemplo cotidiano ocurre al encender la TV de nuestro hogar, ya que enviamos una señal al TV desde el control remoto, la cual luego será decodificada. En esta oportunidad utilizaremos nuestro mini control para activar un display 7 segmentos. Utilizaremos el botón CH- como el botón de encender el display, y luego el display mostrará cualquiera de los números que se presionen en el control.

Si tienes problemas con la librería de IR, te recomiendo descargar ésta  y  y sustituirla por la RobotIRremote que trae el IDE Arduino, Solo debes quitar la carpeta mencionada y colocar la arduino-IR-remote

Pasos a seguir:

 

#1   Armar el circuito según la imagen

#2   Abrir el IDE de Arduino y conectar la tarjeta PICARO al computador

#3   Seleccionar el tipo de tarjeta como Arduino Uno

#4   Elegir el puerto serial en que se encuentra conectada la tarjeta PICARO

#5   Copiar el código de ejemplo al IDE, compilarlo y subirlo

Listado de componentes :

Código:

En este proyecto haremos uso de la librería IRremoto.h que nos ayuda a manejar la recepción y envío por medio de Infrarrojo. Se declaran los arreglos para nuestros dígitos del display de segmentos. Los “1” del arregle indican los segmentos que se encenderán, de igual manera se definen los valores hexadecimales que nos entrega nuestro control remoto para cada botón. De esta manera se compara lo que recibe nuestro PICARO desde el control con los valores hexadecimales que definimos anteriormente para cada botón, si encuentra una coincidencia se mostrará ese numero en el display
#include 

int recvLED = 13;

int recvPin = 11;

IRrecv irReciver(recvPin);

decode_results results;

byte segmento[] = { 2, 3, 4, 5, 6, 7, 8, 9 }; // Se definen pins para el display 7 segmento

byte digits[][13] = { // Arreglo para encender el display 7 segmento

   { 1, 1, 1, 1, 1, 1, 0, 0}, // digito 0

   { 0, 0, 1, 1, 0, 0, 0, 0}, // digito 1

   { 1, 1, 0, 1, 1, 0, 1, 0}, // digito 2

   { 0, 1, 1, 1, 1, 0, 1, 0}, // digito 3

   { 0, 0, 1, 1, 0, 1, 1, 0}, // digito 4

   { 0, 1, 1, 0, 1, 1, 1, 0}, // digito 5

   { 1, 1, 1, 0, 1, 1, 1, 0}, // digito 6

   { 0, 0, 1, 1, 1, 0, 0, 0}, // digito 7

   { 1, 1, 1, 1, 1, 1, 1, 0}, // digito 8

   { 0, 1, 1, 1, 1, 1, 1, 0}, // digito 9

   { 1, 0, 0, 1, 1, 1, 1, 0}, // Boton Enceder (CH-)

   { 1, 0, 1, 1, 1, 1, 0, 0}, // Volumen +

   { 1, 1, 1, 1, 0, 1, 0, 0} // Volumen -

};

const unsigned long decodeHASH[] = { //Se definen los Valores hexadecimal que arroja cada boton (Para otro control podrian ser diferentes)

  0xFF6897, // Digito 0

  0xFF30CF, // digito 1

  0xFF18E7, // digito 2

  0xFF7A85, // digito 3

  0xFF10EF, // digito 4

  0xFF38C7, // digito 5

  0xFF5AA5, // digito 6

  0xFF42BD, // digito 7

  0xFF4AB5, // digito 8

  0xFF52AD, // digito 9

  0xFFA25D, // Boton Encender

  0xFFA857, // Volumen +

  0xFFE01F // volumen -

};

 

unsigned long lastTime = 0;

 

void setup()

{

  pinMode(recvLED, OUTPUT); //Se configura el recvLED pin como Salida

  digitalWrite(recvLED, LOW); //Se mantiene apagado hasta iniciar

  Serial.begin(9600); //Se inicia el puerto Serial

  irReciver.enableIRIn(); // Se inicia el Receptor Infrarrojo

 

  for (int i=0; i<8; i++)

  {

    pinMode(segmento[i], OUTPUT); //Se configuran todos los pines del display 7 seg como Salidas

  }

}

void loop()

{

  unsigned long recv_value;

 

  if (irReciver.decode(&results)) { //Se Realiza la decodificacion de los valores que recibe el sensor del control

    recv_value = results.value; //Se asigna el valor a una variable

    Serial.println(recv_value); //Se imprime el valor por el puerto serial

    delay(2);

    if ( recv_value != 0xFFFFFFFF ) //Ignora el 0x00 valor recibido como resultado de mantener presionado un boton en el control por un tiempo

    {

      digitalWrite(recvLED, HIGH); // Parpadea el LED cada vez que se presiona un boton

      delay(10);

      digitalWrite(recvLED, LOW);

     

      Serial.println(recv_value, HEX); // Se imprime el valor decodificado en hexadecimal (esto es solo para saber que nos esta mandando)

     

     for (int i=0; i<13; i++) // Se crea un bucle para que el valor recibido recorra el arreglo hasta encontrar coincidencia

      {

        if ( recv_value == decodeHASH[i] ) // Si el valor recibido encuentra una coincidencia en el arreglo

        {

          lastTime = millis(); //Tiempo en el que se presiono un boton del control (inicia el temporizador)

          for (int j=0; j<=8; j++)

           

            digitalWrite(segmento[j], digits[i][j]); //Se colocan los valores HIGH o LOW en el arregllo digits

           

          break; // Se sale del bucle si se presiona otro boton

        }

      }

    }

    irReciver.resume(); // Lee el siguiente valor

  }

 

  if ( millis() - lastTime >= 10000 ) // Se apaga el display despues de 10 segundos si no se ha presionado un boton

  {

    for (int k=0; k<=8; k++)

      digitalWrite(segmento[k], LOW);

     

    lastTime = 0; // Se resetea la variable de temporizador a cero

  }

}

 

Demostración

Acá tenemos un vídeo donde podremos observar el funcionamiento de nuestro circuito. Como se explicó anteriormente, tenemos un mini control remoto, que emite señales infrarrojas a través de un LED infrarrojo, estas señales llegan a nuestro PICARO por medio del receptor infrarrojo, el cual decodifica la señal y muestra el dígito en el display 7 segmentos.

¿En busca del Kit PICARO?

Con el PICARO Starter Kit podrás realizar estos ejemplos ¡y mucho más!
Producto Chileno. Encuéntralo en MCI Electronics.

Contacto

Direccion Luis Thayer Ojeda 0115 Of. 1105, Providencia, Santiago, Chile.

Phone: +56 2 2333 9579 / +56 2 2231 9268

Horario Lunes a Viernes de 8:00 a 18:00

Nosotros

En MCI Electronics, estamos aquí para mantener la industria en movimiento. Nuestro objetivo es difundir y hacer accesible el uso de la electrónica a todo aquel que tenga el interés. Para ello nos esforzamos para traer los mejores componentes y módulos de manera que puedas aprender desarrollando tus propios proyectos.

Somos tu aliado en electrónica.

Suscríbete a nuestro boletín