CONTADOR DOS DÍGITOS CON INFRARROJO


#include <IRremote.h>

int receiver = A0; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;

int contador = 0;  //Variable asociada al contador

int unidad=0;         // cuenta las unidades (derecha)
int decena=0;         // cuenta las decenas (izquierda)

void encender(int a, int b, int c, int d, int e, int f, int g)
{
  //Funcion que permite mostrar los numeros del 0 al 9
  //Asigna un segmento del display a cada pin

  digitalWrite (7,a);   //Se reciben 7 variables y se asignan
  digitalWrite (8,b);   //a cada una de las salidas
  digitalWrite (9,c);
  digitalWrite (10,d);
  digitalWrite (11,e);
  digitalWrite (12,f);
  digitalWrite (13,g);
 
}

void encender2(int a2, int b2, int c2, int d2, int e2, int f2, int g2)
{
  //Funcion que permite mostrar los numeros del 0 al 9
  //Asigna un segmento del display a cada pin

  digitalWrite (0,a2);   //Se reciben 7 variables y se asignan
  digitalWrite (1,b2);   //a cada una de las salidas
  digitalWrite (2,c2);
  digitalWrite (3,d2);
  digitalWrite (4,e2);
  digitalWrite (5,f2);
  digitalWrite (6,g2);
 
}

void setup() {

 
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
 
  //Inicializa los pines como entradas/salidas digitales

  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
 
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);

}

void loop() {
 
  if (irrecv.decode(&results)) // have we received an IR signal?
   {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume(); // receive the next value

 
  if (results.value==0xFD807F)
  {
    contador++;
    unidad=unidad+1;          // incrementa la unidad, primer 7seg
    if (unidad >= 10){        // cuando la unidad llegue a 10 incrementa la decena
        decena=decena+1;      // incrementa la decena,  segundo 7seg
      unidad=0;               // regresa la unidad a cero
      if (decena>=10){        // cuando la decena llegue a 10 se inicializa a cero   
       decena=0;
      }     
    }
 }


  if (results.value==0xFD906F)
  {
    contador--;
     unidad=unidad-1;         
    if (unidad < 0){       
        decena=decena-1;     
      unidad=9;             
      if (decena<0){       
       decena=0;
      }     
    }
 }
   
   
  } //Fin IF global
 

 
 
  switch (contador)
  {
    //Dependiendo del contador, se muestra el numero indicado
    //Envia estados (1 y 0) al display dependiendo del numero a mostrar

    case 0:
      encender (1, 1, 1, 1, 1, 1, 0); //Muestra el numero 0
      break;

    case 1:
      encender (0, 1, 1, 0, 0, 0, 0); //Muestra el numero 1
      break;

    case 2:
      encender (1, 1, 0, 1, 1, 0, 1); //Muestra el numero 2
      break;

    case 3:
      encender (1, 1, 1, 1, 0, 0, 1); //Muestra el numero 3
      break;

    case 4:
      encender (0, 1, 1, 0, 0, 1, 1); //Muestra el numero 4
      break;

    case 5:
      encender (1, 0, 1, 1, 0, 1, 1); //Muestra el numero 5
      break;

    case 6:
      encender (1, 0, 1, 1, 1, 1, 1); //Muestra el numero 6
      break;

    case 7:
      encender (1, 1, 1, 0, 0, 0, 0); //Muestra el numero 7
      break;

    case 8:
      encender (1, 1, 1, 1, 1, 1, 1); //Muestra el numero 8
      break;

    case 9:
      encender (1, 1, 1, 0, 0, 1, 1); //Muestra el numero 9
      break;
  }
}

Comentarios

Entradas populares de este blog

Alarma visual (Led con ultrasonido)

Sistema de turnos con led de 7 segmentos y pulsadores

Teclado matricial 4x4 con LCD