IR Remote Control Car

Tengo este código:

#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define IR_Go      0xb946ff00
#define IR_Back    0xea15ff00
#define IR_Left    0xbb44ff00
#define IR_Right   0xbc43ff00
#define IR_Stop    0xbf40ff00
#define IR_ESC     0xb54aff00
#define Lpwm_pin  5     //adjusting speed 
#define Rpwm_pin  6    //adjusting speed //
int pinLB=2;           // defining pin2 left rear
int pinLF=4;           // defining pin4 left front
int pinRB=7;           // defining pin7 right rear
int pinRF=8;           // defining pin8 right front

void go_forward(unsigned char speed_val)    // speed_val:0~255
    {digitalWrite(pinRB,HIGH); 
     digitalWrite(pinRF,LOW);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,LOW);
     analogWrite(Lpwm_pin,speed_val);
     analogWrite(Rpwm_pin,speed_val);
     
      
    }

void go_backward(unsigned char speed_val)    // speed_val:0~255
    {
     digitalWrite(pinRB,LOW);  
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,LOW);  
     digitalWrite(pinLF,HIGH);
     analogWrite(Lpwm_pin,speed_val);
     analogWrite(Rpwm_pin,speed_val);
    }
    
void rotate_left(unsigned char speed_val)        // speed_val:0~255
    {digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,LOW );  
     digitalWrite(pinLB,LOW); 
     digitalWrite(pinLF,HIGH);
     analogWrite(Lpwm_pin,speed_val);
     analogWrite(Rpwm_pin,speed_val);
      
     
    }
void rotate_right(unsigned char speed_val)    // speed_val:0~255
    {
      digitalWrite(pinRB,LOW);  
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,LOW);  
     analogWrite(Lpwm_pin,speed_val);
     analogWrite(Rpwm_pin,speed_val);
     
    }    
void stopp()        //stop
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
    }
         
void IR_Control()
{
   unsigned long Key;
   if(irrecv.decode(&results)) //judging if serial port receives data   
 {
     Key = results.value;
    switch(Key)
     {
       case IR_Go:go_forward(150);   //UP
       break;
       case IR_Back:go_backward(150);   //back
       break;
       case IR_Left:rotate_left(100);   //Left    
       break;
       case IR_Right:rotate_right(100); //Righ
       break;
       case IR_Stop:stopp();   //stop
       break;
       default: 
       break;      
     } 
     irrecv.resume(); // Receive the next value
    } 
  
}
void setup() 
{ 
   pinMode(pinLB,OUTPUT); // pin2
   pinMode(pinLF,OUTPUT); // pin4
   pinMode(pinRB,OUTPUT); // pin7 
   pinMode(pinRF,OUTPUT); // pin8
   pinMode(Lpwm_pin,OUTPUT); // pin5 (PWM) 
   pinMode(Rpwm_pin,OUTPUT); // pin6 (PWM)   
   irrecv.enableIRIn(); // Start the receiver
   Serial.begin(9600);   //initializing serial port, Bluetooth used as serial port, setting baud ratio at 9600 
   stopp();  
}
void loop() 
{  
   
   IR_Control();
    
}

Y así lo tengo estructurado

Sin embarg no sé porque no funciona a la hora de utilizar el control remoto

Desconecte todos los cables y dispositivos. Vuelva a conectar el receptor I.R. solamente. Cargue solo el boceto de IRremote. ¿Cómo funciona en esta configuración "mínima"?

#include <IRremote.h>
IRrecv IR(11);

void setup() {
  IR.enableIRIn();
  Serial.begin(9600);
}

void loop() {
 if(IR.decode()){
  Serial.println(IR.decodedIRData.decodedRawData, HEX);
  delay(1500);
  IR.resume();
 }
}

Creo que así quedaría solamente con IR, pero este código es para saber la frecuencia para cada botón, ¿aún así sirve?

IRremote es la pregunta del tema y el problema.

El receptor IR solo ve la señal IRremote. La biblioteca IRremote decodifica la señal. El programa toma decisiones basadas en el valor decodificado.

Si lo tienes conectado exactamente y tal cual como lo has dibujado, el problema es que el código espera la señal del receptor IR en el pin 11 pero lo has conectado en el pin 12.

Hola @Eithan. Además del baile de pines que te indica @MaximoEsfuerzo, estas llamando mal a la biblioteca del IR:

Me centro en el código del #3.

Esa es una forma ya obsoleta de llamar a la biblioteca IRremote.h. Durante un tiempo la propia biblioteca te avisaba, con las ultimas actualizaciones ya no lo hace. Con la forma actual el código del #3 quedaría asi:

#include <IRremote.h>

#define PIN_IR 11          // pin de entrada sensor mando IR


void setup() {
  IrReceiver.begin(PIN_IR, ENABLE_LED_FEEDBACK);
  Serial.begin(9600);
}

void loop() {
  if (IrReceiver.decode()) {
    Serial.println(IrReceiver.decodedIRData.command);
    delay(1500);
    IrReceiver.resume();
  }
}

Con este, saca los nuevos códigos de tu mando IR y actualiza en el código del #1 la forma de llamar a la biblioteca y el switch/case con los nuevos códigos obtenidos..

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.