Go Down

Topic: como hago para led intermitente con infrarrojo (solucionado) (Read 449 times) previous topic - next topic

Jack294

No encuentro ni un ejemplo ni un vídeo de como se hace un led intermitente con infrarrojo. yo he visto vídeo de como se usa el control remoto en arduino y he visto vídeo de como hacer que un led que sea intermitente. pero no encuentro una que el led sea intermitente con control infrarrojo.
por favor ayúdenme si alguien sabe.
lo que hice es unir las dos teoría pero no funciona. se enciende y luego se mantiene apagado.
no se mucho de arduino quizá hay un código que me falta poner y no lo sé
aquí esta mi código


Code: [Select]

#include <IRremote.h>

int receptor = 2;
int led = 13, led2 = 8;

IRrecv irrecv(receptor);
decode_results codigo; //OBJETO CODIGO DE CLASE decode_result, oriundo de IRremote.h

void setup() {
  Serial.begin(9600);     //Inicializamos el puerto serial
  irrecv.enableIRIn();    //Habilitamos el sensor infrarrojo para que pueda recibir lecturas

  {
  pinMode(13, OUTPUT);
  pinMode(8, OUTPUT);// declaramos el pin i como salida
  }
}

void loop() {
  if (irrecv.decode(&codigo)) //Si hay una lectura recibida
  {
    Serial.print("0x"); //macro para ver código de tecla por comunicación serial
  Serial.println(codigo.value, HEX);
    switch (codigo.value)
    {
      case 0xF710EF:   
      if (digitalRead(13),(8))
     
          digitalWrite(13, HIGH); // encedemos el LED
          digitalWrite(8, HIGH);
          delay(500); //esperamos medio segundos
          digitalWrite(13, LOW); // apagamos el LED
          digitalWrite(8, LOW);
          delay(500);
          break;

        case 0xF7906F:
         digitalWrite(13, LOW); // apagamos el LED
          digitalWrite(8, LOW);
          delay(500);
 
  }
  delay(250); //delay para evitar que se presione la tecla 2 veces
  irrecv.resume();//dejar de recibir datos
  }
}




quiero encenderlo con un botón y luego a pagarlo con ese mismo botón o con otro botón.
si le quito el "irrecv.resume" entonces se queda parpadeando infinitamente y no puedo a pagarlo. :smiley-confuse:

utilizo este infrarrojo





surbyte

A ver. un LED es un led no importa si es visible su luz o no lo es. Asi que el simple Blink.ino de tu IDE hará que parpadee a menos que tu consulta tenga otra lectura diferente.

Si es infrarrojo no verás que parpadea. Para ello tienes que poner en paralelo otro led visible para que cuando este en ON tu veas el visible y vice verza.

Igualmente por lo que pones en el código no entiendo lo que quieres hacer.

Jack294

lo que estoy tratando de hacer es montar en un carro de juguete un circuito de luz de carro, en la cual lleva luz blanca que es el faro, la luz roja que son las luces de freno y por ultimo la luces de estacionamiento o parking. todo eso controlado con un control remoto.
yo puedo encender la luz blanca y pagarlo con ese mismo botón, igual que la luz roja, todo eso controlado por un control remoto.
 
mi problema es que la luces de parking son de intermitente o de parpadeo, entonces no logro hacer que en un botón de control remoto pueda encenderlo el led haciendo la función del intermitente y luego a pagarlo con ese mismo botón dejando de hacer el intermitente.

no conozco mucho de arduino solo lo básico, entonces estoy pidiendo ayuda que alguien me oriente si hay que agregar una libreta adicional o como iría los código para que un led haga la función de intermitente controlado por un control remoto.



Code: [Select]

#include <IRremote.h>

int receptor = 2;       // sensor infrarrojo
int faro = 13, freno = 12, direccionales = 11, direccionales2 = 10; // led de luz blanco,roja y naranja.

IRrecv irrecv(receptor);
decode_results codigo;

void setup() {

  Serial.begin(9600);     
  irrecv.enableIRIn(); 
 
  for (int i = 10; i <= 13; i++)
  {
  pinMode(i, OUTPUT);   // declaramos el pin i como salida
  }
}

void loop() {
  if (irrecv.decode(&codigo)) //Si hay una lectura recibida
  {
    Serial.print("0x");
    Serial.println(codigo.value, HEX);
    switch (codigo.value)
    {
      case 0xF7E01F:        //Corresponde al boton W
       if (faro == 0)
       {
         digitalWrite(13, HIGH);
         faro = 1;
         
       }
       else
       {
        digitalWrite(13, LOW);
        faro = 0;
       }
       break;

      case 0xF720DF:     // corresponde al boton R
       if (freno == 0)
       {
        digitalWrite(12, HIGH);
        freno = 1;
       }
       else
       {
        digitalWrite(12, LOW);
        freno = 0;
       }
       break;

      case 0xF710EF:            //Corresponde al boton 1 para actvar el led
   
       if (direccionales, direccionales2 == 0)
       
       {

         digitalWrite(11, HIGH); // encedemos el LED
         digitalWrite(10, HIGH);
         delay(500);             //esperamos medio segundos
         digitalWrite(11, LOW);
         digitalWrite(10, LOW);
         delay(500);
         direccionales, direccionales2 = 1;
         
       }
       else

       {
         digitalWrite(11, LOW); // apagamos el LED
         digitalWrite(10, LOW);
         direccionales, direccionales2 = 0;
       
       }
       break;
   }
   delay(200);
   irrecv.resume();

  }
}




la parte de faro y freno están bien. mi problema es en la direccionales, que no hacen el intermitente cuando presiono el botón, solo se prende y en medio segundo se apaga.

quiero que me ayuden que es lo que debo hacer para que el led haga la función de intermitente al presionar un botón y que lo deje de hacer al presionar el mismo botón.

osea que en la parte direccionales no hace el ciclo de intermitente porque no se como se configura al utilizarlo con un control remoto.

no se si eso se pueda hacer ya que no encuentro vídeo ni información que lo pueda realizar el arduino.

ojo! solo estoy haciendo esta pregunta cuando utilizo el control remoto. ya que sin el control remoto, sí puedo hacer que el led sea intermitente.

noter

Deberías usar una variable que indique si las direccionales están o no activadas. En otro punto, comprueba dicha variable. Si está activada, miras los millis y controlas si "es hora de encender o apagar". Este código no está probado, pero debería servirte de guía.
Code: [Select]

#include <IRremote.h>

const int receptor = 2;       // sensor infrarrojo
const int faro = 13, freno = 12, direccionales = 11, direccionales2 = 10; // led de luz blanco,roja y naranja.
bool direccionalesOn=false, direccionalesEncendidos=false;

IRrecv irrecv(receptor);
decode_results codigo;
unsigned long millisAnterior = 0, ciclo = 500;

void setup() {

  Serial.begin(9600);     
  irrecv.enableIRIn();
 
  for (int i = 10; i <= 13; i++)
  {
    pinMode(i, OUTPUT);   // declaramos el pin i como salida
  }
}

void loop()
{
  if (irrecv.decode(&codigo)) //Si hay una lectura recibida
  {
    Serial.print("0x");
    Serial.println(codigo.value, HEX);
    switch (codigo.value)
    {
      case 0xF7E01F:        //Corresponde al boton W
        digitalWrite(faro, !digitalRead(faro));
      break;
      case 0xF720DF:     // corresponde al boton R
        digitalWrite(freno, !digitalRead(freno));
      break;
      case 0xF710EF:            //Corresponde al boton 1 para actvar el led   
        direccionalesOn=!direccionalesOn;
      break;
    }
    delay(200);
    irrecv.resume();
  }
 
  // aquí hacemos el ciclo de intermitencia con millis, si direccionalesOn es true
  if (direccionalesOn) { // si están activados los direccionales, parpadeamos con millis
    if(millis()-millisAnterior >= ciclo) {
      direccionalesEncendidos = !direccionalesEncendidos;
      digitalWrite(direccionales, direccionalesEncendidos);
      digitalWrite(direccionales2, direccionalesEncendidos);
    }
  }
  else { // si no estánn activados los direccionales y las luces direccionales están encendidas, las apagamos.
    if (direccionalesEncendidos) {
      direccionalesEncendidos = !direccionalesEncendidos;
      digitalWrite(direccionales, direccionalesEncendidos);
      digitalWrite(direccionales2, direccionalesEncendidos);
    }
  }
}

Jack294

Perfecto!! eso era lo que quería sabia que había que poner unos códigos pero desconocía de ellos. muchísima gracias! gracias por tomar tu tiempo en ayudarme.

Al probar los código que hiciste, solo se mantuvo encendido los led de direccionales no hizo el intermitente, pero ya estaba casi cerca a los resultado que quería porque podía pagarlo con ese mismo botón, entonces solo le agregue el delay y listo! ya hacia el intermitente infinitamente y podía pagarlo y encenderlo con el mismo boton.



Code: [Select]

// aquí hacemos el ciclo de intermitencia con millis, si direccionalesOn es true
  if (direccionalesOn) { // si están activados los direccionales, parpadeamos con millis
    if(millis()-millisAnterior >= ciclo) {
      direccionalesEncendidos = !direccionalesEncendidos;
      digitalWrite(direccionales, direccionalesEncendidos);
      digitalWrite(direccionales2, direccionalesEncendidos);
      delay(500);
    }
  }
  else { // si no estánn activados los direccionales y las luces direccionales están encendidas, las apagamos.
    if (direccionalesEncendidos) {
      direccionalesEncendidos = !direccionalesEncendidos;
      digitalWrite(direccionales, direccionalesEncendidos);
      digitalWrite(direccionales2, direccionalesEncendidos);
    }
  }
}




Muchísima gracias Edison, Te deseo éxito en tu vida.

Go Up