domingo, 20 de enero de 2019

Arduino: Display 7 segmentos

En esta entrada veremos como funciona un display de 7 segmentos con Arduino




Código;


//array con los pines donde van conectados los segmentos
int ledes[8]={2,3,4,5,6,7,8,9};

/* array con las combinaciones de encendido/apagado para cada núnero
      pin 2
   **********
 8 *        *3
   *   9    *
   **********
 7 *        *4
   *        *
   **********  * 5
       6
*/
int numeros[10][8]={
  //0
  {1,1,1,1,1,1,1,0},
  //1
  {0,1,1,1,0,0,0,0},
  //2
  {1,1,0,1,1,1,0,1},
  //3
  {1,1,1,1,1,0,0,1},
  //4
  {0,1,1,1,0,0,1,1},
  //5
  {1,0,1,1,1,0,1,1},
  //6
  {0,0,1,1,1,1,1,1},
  //7
  {1,1,1,1,0,0,0,0},
  //8
  {1,1,1,1,1,1,1,1},
  //9
  {1,1,1,1,0,0,1,0},
};

void setup() {
  for(int i=2;i<10;i++){ 
  pinMode(i,OUTPUT);  //modo de salida para todos los segmentos
  }
}

void loop() {
  // vamos recorriendo el array. Si es 0 no se enciende el led (segmento)
  //si es 1 se enciende el led (segmento)
  for(int i=0;i<10;i++){
    for (int j=0;j<8;j++){
       digitalWrite(ledes[j],numeros[i][j]);
    }
    delay (1000);  //esperamos 1 segundo
 }
}

Arduino: Control con mando IR

Para ver cómo funciona un control con señales infrarrojas pongo dos ejemplos:

Ejemplo1 

Encendido de un LED amarillo durante 1 segundo con la tecla ON/OFF de un mando a distancia y de otro LED verde con la tecla HOME.



Código:

//Incluimos la libreria para manejar el sensor IR
 #include <IRremote.h>

long code=0;  //almacenaremos el códio IR que recibe el
              //sensor del mando a distancia
int pinIR = 2;//La señal del sensor va al pin 2

IRrecv receptorIR(pinIR); //declaramos un objeto del tipo Sensor IR
decode_results results;   // variable que almacena lo que llega del mando 
 
void setup() 
{
  pinMode(3, OUTPUT); //pines de los LEDs
  pinMode(4, OUTPUT);

  Serial.begin(9600);

  receptorIR.enableIRIn(); //Inicializamos el sensor IR

  //Instrucciones de funcionamiento
  Serial.println("pulsa ON/OFF para encender el led amarillo");
  Serial.println("pulsa HOME para encender el led rojo");
}
 
void loop()
{
  digitalWrite(3,LOW);  //apagamos los LEDs
  digitalWrite(4,LOW);
   if(receptorIR.decode(&results)){  //Si llega cualquier valor
      code=results.value;            //Lo almacenamos en la vbe code
      Serial.println(results.value);   
      if((code==65548)or(code==12)){  //algunos mandos mandan varias
          digitalWrite(3,HIGH);       //señales al pulsar cada tecla     
      }
      if((code==65620)or(code==84)){
          digitalWrite(4,HIGH); 
      }
      delay(1000);              //Esperamos 1 segundos
      receptorIR.resume();      //El receptor espera la siguiente señal
   }
}

Ejemplo2 

Encendido de dos LEDs con la tecla ON/OFF y apagado con la HOME




Código:

//Incluimos la libreria para manejar el sensor IR
#include <IRremote.h>

long code=0;  //almacenaremos el códio IR que recibe el
              //sensor del mando a distancia
int pinIR = 2;  //La señal del sensor va al pin 2
int ordenEncender=0;  //utilizamos esta vble para llamar al
                      //procedimiento encender() si esta a 1
                      //y apagar() si esta a 0
                   
IRrecv irrecv(pinIR);    //declaramos un objeto del tipo Sensor IR
decode_results results;  // variable que almacena lo que llega del mando       
 
void setup() 
{
  pinMode(3, OUTPUT);  //pines de los LEDs
  pinMode(4, OUTPUT);

  Serial.begin(9600);

  irrecv.enableIRIn();
 
   //Instrucciones de funcionamiento
  Serial.println("pulsa ON/OFF para encender los ledes");
  Serial.println("pulsa HOME para apagar los ledes");
}
 
void loop()
{
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
   if(irrecv.decode(&results)){    //Si llega cualquier valor
      code=results.value;          //Lo almacenamos en la vbe code
      Serial.println(results.value);
         
      if ((code==65548)or(code==12)){   //algunos mandos mandan varias señales al pulsar cada tecla 
          ordenEncender=1;              //activamos la orden para encender
      }
      if((code==65620)or(code==84)){
          ordenEncender=0;              //desactivamos la orden para encender
      }
   
      //delay(1000);   
      irrecv.resume();      //El receptor espera la siguiente señal
   }
   if(ordenEncender==1){     
          encender();
      }
   if(ordenEncender==0){     
          apagar();
      }
}
   //encendemos los LEDs
void encender(){
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
   }
   //apagamos los LEDs
void apagar(){
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
   }