0

I used the following program to send an IR code and I got the an unexpected result as below:

/*
   IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
   An IR LED must be connected to Arduino PWM pin 3.
   Version 0.1 July, 2009
   Copyright 2009 Ken Shirriff
   http://arcfn.com
*/

#include <IRremote.h>

IRsend irsend;

int j = 0;
void setup()
{
}

void loop() {
  for (int i = 0; i < 3; i++) {
    irsend.sendNEC(0xFF6897, 32);
    delay(40);
    j = j + 1;
  }
  delay(5000); //5 second delay between each signal burst
}

With the following schematic: enter image description here

I expected to receive:

FF6897 Decoded NEC: FF6897 (32 bits) Raw (68): 8750 -4450 550 -550 500 -600 550 -550 550 -550 550 -550 550 -600 500 -600 500 -600 500 -1650 550 -1650 550 -1650 500 -1650 550 -1650 550 -1650 500 -1700 500 -1650 550 -550 500 -1700 550 -1600 550 -600 500 -1650 550 -600 500 -600 500 -600 500 -1650 550 -550 550 -600 500 -1650 500 -600 500 -1700 500 -1650 550 -1650 550

Instead I receive consistently

C101E57B Unknown encoding: C101E57B (32 bits) Raw (68): 8850 -4450 500 -650 450 -600 500 -600 550 -550 500 -650 450 -650 500 -600 450 -650 450 -1800 450 -1700 500 -1750 500 -1700 500 -1750 500 -1700 500 -1750 450 -1750 500 -600 500 -1750 450 -1750 500 -600 450 -1750 500 -650 450 -600 550 -600 500 -1700 500 -600 500 -600 500 -1750 500 -600 500 -1700 500 -1700 550 -1700 450

anyone knows how to fix this?

Code the Reciever uses to decode the just send signal:

/*
 * IRremote: IRrecvDump - dump details of IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
 * LG added by Darryl Smith (based on the JVC protocol)
 */

#include <IRremote.h>

/* 
*  Default is Arduino pin D11. 
*  You can change this to another available Arduino Pin.
*  Your IR receiver should be connected to the pin defined here
*/
int RECV_PIN = 6;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}


void dump(decode_results *results) {
  // Dumps out the decode_results structure.
  // Call this after IRrecv::decode()
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.print("Unknown encoding: ");
  }
  else if (results->decode_type == NEC) {
    Serial.print("Decoded NEC: ");

  }
  else if (results->decode_type == SONY) {
    Serial.print("Decoded SONY: ");
  }
  else if (results->decode_type == RC5) {
    Serial.print("Decoded RC5: ");
  }
  else if (results->decode_type == RC6) {
    Serial.print("Decoded RC6: ");
  }
  else if (results->decode_type == PANASONIC) {
    Serial.print("Decoded PANASONIC - Address: ");
    Serial.print(results->address, HEX);
    Serial.print(" Value: ");
  }
  else if (results->decode_type == LG) {
    Serial.print("Decoded LG: ");
  }
  else if (results->decode_type == JVC) {
    Serial.print("Decoded JVC: ");
  }
  else if (results->decode_type == AIWA_RC_T501) {
    Serial.print("Decoded AIWA RC T501: ");
  }
  else if (results->decode_type == WHYNTER) {
    Serial.print("Decoded Whynter: ");
  }
  Serial.print(results->value, HEX);
  Serial.print(" (");
  Serial.print(results->bits, DEC);
  Serial.println(" bits)");
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 1; i < count; i++) {
    if (i & 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    }
    else {
      Serial.write('-');
      Serial.print((unsigned long) results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}

Schematic wise:

one IR reciever with VCC and Ground connect and signal-out on pin 6

1

In the received RAW codes, the width of the modulated pulses is less than the expected value. And the width of the spaces is bigger than expected.

This is due to the lack of an infrared sensor.

Use infrared receiver another model. For example TSOP4838.

Or try reducing MARK_EXCESS in the IRremoteInt.h of the Arduino-IRremote library from 100 to 50 or 0.

...
// Pulse parms are ((X*50)-100) for the Mark and ((X*50)+100) for the Space.
// First MARK is the one after the long gap
// Pulse parameters in uSec
//

// Due to sensor lag, when received, Marks  tend to be 100us too long and
//                                   Spaces tend to be 100us too short
#define MARK_EXCESS    0
...

And please increase the delay time in transmitter sketch (to avoid codes overlapping) :

...
for (int i = 0; i < 3; i++){ 
  irsend.sendNEC(0xFF6897, 32); 
  delay(200); 
  j = j + 1; 
}
...
  • I changed the delay, still gives the same output as described in my post ;/ (C101E57B) – Anton van der Wel Dec 7 '17 at 22:25
  • myReceiver.markExcess= 100; gives me the exit status 1 'class IRrecv' has no member named 'markExcess' so is my libary missing something? – Anton van der Wel Dec 8 '17 at 19:00
  • 1
    @Anton van der Wel, in the previous question, you used the IRLib2 where the parameter is used. I updated my answer according to the library you are currently using. – AltAir Dec 8 '17 at 21:37
  • 1
    Please, try to change tolerance to 30 or 35 in IRremoteInt.h #define TOLERANCE0 30 . – AltAir Dec 8 '17 at 21:54
  • 1
    @Anton van der Wel, you are using an LED without a limiting resistor. This can lead to overload and distortion of the signal. Also, nothing is known about the infrared receiver and how it is connected to the power supply. – AltAir Dec 8 '17 at 22:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.