Go Down

Topic: Trouble sending IR command to rc curtains (Read 10589 times) previous topic - next topic

juntao65

Hey guys,

So this has had me stumped for the past few days.

Cliffs:
- want to control remote control curtains via arduino
- have this identical setup https://learn.sparkfun.com/tutorials/ir-communication/all
- using shirriff's library to read from the provided remote control

And... that's where things go wrong. Every time I press a particular button from the remote control, I get different values. I understand some protocols allow for a few different codes for the same button press, but I'm literally getting a different value 90% of the time. Occasionally a few values will show up again.

Fortunately the manufacturer has listed some codes so one can program them into home automation devices... so I thought maybe I can bypass the whole receiving/decode and just go to outright sending.

Quote
Is an infrared blaster compatible with erod™ motorized drapery hardware in order to integrate with my home automation system?
Yes, erod™ can be integrated. Use these wavelengths to program the blaster.
Close- 110100100000, Open- 110100010000, Stop- 110100001000
Hex code: Open- D10, Close- D20, Stop- D08


I tried using the following but with no luck:
Code: [Select]
#include <IRremote.h>

IRsend irsend;

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

void loop() {
 
    for (int i = 0; i < 3; i++) {
      irsend.sendNEC(0xd10, 12); // Sony TV power code
      delay(40);
    }
 
}


Also tried sendRC5/RC6, and for the hell of it send sony. Not even sure what protocol it is. Could the remote be using some unsupported protocol? Or am I making some total newbie mistake?

Some other notes
1) The circuit is hooked up correctly, because when I rant he sendPanasonicJVC script I was able to toggle my tv on/off just fine.
2) The IR led is flashing when shining phone camera at it
3) curtain rod manufacturer site : http://myerod.com/faqs/#eighteen
4) I coudln't ever get the raw dump feature to work even for supported remotes such as the panasonic. Like raw dump -> sendRaw. I really don't care about decoding it; my end project has no reads just sends. So if raw can work that'd be swell.

johnwasser

Your curtain controller might be like some air conditioners and use a MUCH longer code than the typical IR remote.  This causes problems with the IRremote library because it has a relatively small buffer.  Go into /Arduino/libraries/IRremote/IRremote.h and change:
Code: [Select]
#define RAWBUF 76 // Length of raw duration buffer
to a higher number like 300.  Then you have to go into IRremoteInt.h and change:
Code: [Select]
  uint8_t rawlen;         // counter of entries in rawbuf
to
Code: [Select]
  uint16_t rawlen;         // counter of entries in rawbuf
Send Bitcoin tips to: 1G2qoGwMRXx8az71DVP1E81jShxtbSh5Hp

AnalysIR

Quote
I coudln't ever get the raw dump feature to work even for supported remotes such as the panasonic

Well you really need to be able to get the raw dump working with standard TV remote & if you can't then you just have a basic issue with your setup or understanding. I presume you were trying the IRrecvDump example sketch!

I suggest you first try working through all of the examples provided with the IRremote library. You will then be able to understand things better.

(Judging from the signals you provided, you are 'unlikely' to be exceeding the default value for RAWBUF as each code appears to be only 12 bits long)

If you posted the sketch you were using to record the signal and the output you get, it might help.


Code: [Select]
irsend.sendNEC(0xd10, 12); // Sony TV power code
Unlikely this will work, because NEC is almost always 32 bits not 12. Plus you dont know what format is used to send the signal.
(Could be worth a shot just changing the 12 to 32) = long shot!

juntao65


Your curtain controller might be like some air conditioners and use a MUCH longer code than the typical IR remote.  This causes problems with the IRremote library because it has a relatively small buffer.  Go into /Arduino/libraries/IRremote/IRremote.h and change:
Code: [Select]
#define RAWBUF 76 // Length of raw duration buffer
to a higher number like 300.  Then you have to go into IRremoteInt.h and change:
Code: [Select]
  uint8_t rawlen;         // counter of entries in rawbuf
to
Code: [Select]
  uint16_t rawlen;         // counter of entries in rawbuf


I don't think for this particular remote the buffer is an issue, but for the sake of leaving no stone unturned I attempted this anyways. Nothing much has changed.

Although to note, I tried with my panasonic remote and it seems like the raw output still caps at 100 (the value it was before). I made those 2 changes that you recommended and then restarted the arduino program but it still seems to stop at 100.

Code: [Select]
Decoded PANASONIC - Address: 4004 Value: 100BCBD (48 bits)
Raw (100): 27500 3450 -1650 500 -400 500 -1200 500 -350 500 -400 500 -350 500 -350 500 -350 500 -400 500 -350 500 -350 500 -350 500 -350 500 -400 500 -1200 500 -350 500 -400 500 -350 500 -350 500 -350 500 -400 450 -400 500 -350 500 -350 500 -1250 500 -350 500 -350 500 -350 500 -400 500 -350 500 -350 500 -350 500 -400 500 -1200 500 -350 500 -1250 500 -1200 500 -1250 500 -1200 500 -350 500 -400 500 -1200 500 -350 500 -1250 500 -1200 500 -1250 500 -1200 500 -350 500 -1250 500
F61E2A57
Unknown encoding: F61E2A57 (32 bits)
Raw (100): -5754 3400 -1750 450 -400 450 -1250 450 -450 450 -400 450 -400 450 -400 450 -450 400 -450 450 -400 450 -400 450 -400 450 -450 450 -400 450 -1250 450 -450 400 -450 450 -400 450 -400 450 -450 450 -400 450 -400 450 -400 450 -400 450 -1300 450 -400 450 -400 450 -450 450 -400 450 -400 450 -400 450 -450 400 -450 450 -1250 450 -400 450 -1300 450 -1250 450 -1300 500 -1200 500 -400 450 -400 450 -1250 500 -400 450 -1250 500 -1200 500 -1250 500 -1200 500 -400 450 -1250 500
100BCBD
Decoded PANASONIC - Address: 4004 Value: 100BCBD (48 bits)
Raw (100): -8414 3500 -1650 500 -350 500 -1250 500 -350 500 -350 500 -350 500 -400 450 -400 500 -350 500 -350 500 -400 450 -400 500 -350 500 -350 500 -1250 500 -350 500 -350 500 -350 500 -400 500 -350 500 -350 500 -350 500 -400 450 -400 500 -1200 500 -350 500 -400 500 -350 500 -350 500 -350 500 -400 450 -400 500 -350 500 -1250 450 -400 500 -1200 500 -1250 500 -1200 500 -1250 500 -350 500 -350 500 -1250 500 -350 500 -1200 500 -1250 500 -1200 500 -1250 500 -350 500 -1200 500


Here's some random codes from my curtain with the raw dump... does this mean it's 32 bit?

Code: [Select]
Unknown encoding: 3E84FD4 (32 bits)
Raw (14): 6486 250 -3100 250 -2000 350 -3000 350 -900 250 -750 350 -750 350
285083F4
Unknown encoding: 285083F4 (32 bits)
Raw (12): -24250 250 -3100 250 -2000 350 -3000 350 -750 400 -2000 250
E9E70E8C
Unknown encoding: E9E70E8C (32 bits)
Raw (8): -28800 250 -3100 300 -1950 350 -3000 350
7686B868
Unknown encoding: 7686B868 (32 bits)
Raw (12): 3186 400 -3000 300 -1900 250 -900 250 -2000 200 -3150 350
FABBA044
Unknown encoding: FABBA044 (32 bits)
Raw (18): -23200 300 -3100 250 -1950 250 -1000 800 -200 400 -700 350 -800 350 -750 350 -750 400
7C8E0E54
Unknown encoding: 7C8E0E54 (32 bits)
Raw (12): 6336 950 -200 950 -150 400 -700 950 -200 400 -700 200
E6E709D5
Unknown encoding: E6E709D5 (32 bits)
Raw (8): -6450 250 -3100 250 -900 200 -900 250
46172D8F
Unknown encoding: 46172D8F (32 bits)
Raw (8): 6336 1000 -150 950 -200 350 -700 350
FECB4123
Unknown encoding: FECB4123 (32 bits)
Raw (8): 6486 950 -200 900 -250 350 -700 250
801C88CB
Unknown encoding: 801C88CB (32 bits)
Raw (10): -6500 250 -2000 200 -900 250 -900 200 -900 250

AnalysIR

#4
Mar 23, 2014, 08:40 pm Last Edit: Mar 23, 2014, 08:42 pm by AnalysIR Reason: 1
I had a look at your 'curtain' signals and you are right, they are random-ish, although some look similar but are not obviously a match for the  'erod' codes provided.

What type of IR receiver are you using  (ie model no & modulation frequency)?

How far way from the receiver do you have the remote when capturing?
Make sure you have nothing around your IR receiver (or behind) that could be reflecting the signal & causing interference.

You signals ar not 32 bits....IRremote seems to default to that when it cant figure out the signal. (not sure)


Given that the manufacturer published the codes, maybe you should email them to see if they would give you more info (like modulation frequency & pulse timings and/or IR protocol used - not just the Hex codes).


BTW: Your panasonic signals decode on my system as the 'Japanese Code' protocol which is not so common. It has 48 bits (96 mark/spaces), plus 4 other mark/spaces (lead-in, header & trailer), which coincidently matches the max setting for RAWBUF of 100. what type of device is this Panasonic (TV ?).

johnwasser

It might be time to find someone with a storage oscilloscope so you can check the raw signal for modulation frequency and pulse widths.
Send Bitcoin tips to: 1G2qoGwMRXx8az71DVP1E81jShxtbSh5Hp

juntao65


I had a look at your 'curtain' signals and you are right, they are random-ish, although some look similar but are not obviously a match for the  'erod' codes provided.

What type of IR receiver are you using  (ie model no & modulation frequency)?

How far way from the receiver do you have the remote when capturing?
Make sure you have nothing around your IR receiver (or behind) that could be reflecting the signal & causing interference.

You signals ar not 32 bits....IRremote seems to default to that when it cant figure out the signal. (not sure)


Given that the manufacturer published the codes, maybe you should email them to see if they would give you more info (like modulation frequency & pulse timings and/or IR protocol used - not just the Hex codes).


BTW: Your panasonic signals decode on my system as the 'Japanese Code' protocol which is not so common. It has 48 bits (96 mark/spaces), plus 4 other mark/spaces (lead-in, header & trailer), which coincidently matches the max setting for RAWBUF of 100. what type of device is this Panasonic (TV ?).


This is the receiver: http://www.rpelectronics.com/tsop38238-ir-receiver-module-38khz-carrier-freq.html
38khz, unsure of model?

Distance from receiver... Less than 5cm. I also tried using bigger distances like a meter or 2 away. Still get different numbers on each press.

The IR receiver seems to work fine when using other remotes, I've tested it with a Toshiba TV and a motorolla cable box and it works swell. Pioneer dvd player.. it reads the same hex code consistently but when using IRrecord to send a signal it doesn't seem to work. I've made sure there were no wires or anything blocking the line of sight from remote --> receiver.

I've sent the manufacturer an email already and still waiting on response. Though I only asked them which protocol they're using, I guess if they respond I'll follow up with the stuff you added.

The panasonic is a vierra TV.

Right now I'm attempting to get sendRaw to work with devices that work with IRrecord so I can understand it better.

juntao65


It might be time to find someone with a storage oscilloscope so you can check the raw signal for modulation frequency and pulse widths.


Man I was hoping to avoid this but it might be my last resort eh? is there some cheap pc ghetto version I can get?

So some update. I dissected the IRrecord sketch to use raw outputs all the time, and they work well with most of my home theatre devices... excluding my panasonic TV.

What works: Yamaha receiver, both motorolla cable boxes, toshiba tv.
Doesn't work: Panasonic TV ( but works if I use the sendPanasonic command from the JVCPanasonicSendDemo sketch), pioneer dvd player, bose sound dock, and regrettably the only thing I care about working ... the electric curtains.

AnalysisIR - that's quite coincidental that the marks/spaces line up to 100, I thought my buffer changes had no effect. Anyways I am now attempting to use the advice from your blog and use the IRLib library. I will continue to update. Let me know if there's more I should try.

AnalysIR

That IR receiver is classed as legacy in the datasheet. It may be that the modulated bursts are too short for it to lock on reliably or could be that its a 56kHz signal???

If you are confident opening up the receiver in the curtain unit, you could tap into the output signal, provided it is 3->5V, with your arduino and use the following  sketch to record the times.
CAUTION: use at your own risk and beware of any mains voltage.
http://www.analysir.com/blog/2014/03/19/air-conditioners-problems-recording-long-infrared-remote-control-signals-arduino/
download link at bottom of page

Now that I think about it, your could use this sketch to get better timings than IRrremote, from your existing receiver- so why not  try that first before messing with the curtain unit and post the output.


Regarding your Panasonic TV....this signal will work if you resend using sendRAW. You could also update the library to handle the actual codes.

juntao65

#9
Mar 24, 2014, 08:42 pm Last Edit: Mar 24, 2014, 08:48 pm by juntao65 Reason: 1

That IR receiver is classed as legacy in the datasheet. It may be that the modulated bursts are too short for it to lock on reliably or could be that its a 56kHz signal???

If you are confident opening up the receiver in the curtain unit, you could tap into the output signal, provided it is 3->5V, with your arduino and use the following  sketch to record the times.
CAUTION: use at your own risk and beware of any mains voltage.
http://www.analysir.com/blog/2014/03/19/air-conditioners-problems-recording-long-infrared-remote-control-signals-arduino/
download link at bottom of page

Now that I think about it, your could use this sketch to get better timings than IRrremote, from your existing receiver- so why not  try that first before messing with the curtain unit and post the output.


Regarding your Panasonic TV....this signal will work if you resend using sendRAW. You could also update the library to handle the actual codes.


I tried your sketch but I keep getting gibberish output. I'm supposed to connect the IR receiver to pin 2 right vs pin 11 for IRremote right?

Example output:
Code: [Select]
Gþß2¦ï2½"ýq²2¦,ï2¦ïÓ¥Ú?íé6¦÷q²íé7Vþ?oû7Vó?oû2¦,ïò0þþßÇhÈq²ìéM" XÞ?ÿ?q4â2½"ý

EDIT: I changed the serial begin to 9600 and that seemed to have fixed it. panasonic returned this:

Code: [Select]
Raw: (586) 3496, -1700, 480, -388, 484, -1256, 476, -396, 476, -392, 480, -392, 480, -392, 480, -388, 476, -396, 476, -392, 480, -392, 480, -388, 484, -388, 484, -384, 484, -1256, 480, -392, 480, -392, 480, -388, 484, -388, 484, -384, 476, -396, 476, -392, 480, -392, 480, -392, 480, -1260, 484, -384, 476, -396, 476, -392, 480, -392, 480, -392, 480, -388, 484, -388, 476, -392, 480, -1260, 484, -388, 480, -1260, 476, -1264, 480, -1260, 484, -1256, 476, -396, 476, -396, 476, -1264, 480, -388, 484, -1260, 472, -1268, 476, -1264, 472, -1268, 476, -392, 480, -1264, 476, -9108, 3492, -1700, 480, -392, 480, -1260, 472, -396, 476, -396, 476, -392, 480, -392, 480, -392, 468, -400, 472, -400, 472, -396, 476, -396, 476, -392, 480, -392, 472, -1268, 476, -396, 476, -392, 480, -392, 480, -388, 484, -388, 472, -396, 476, -396, 476, -396, 476, -392, 480, -1260, 484, -388, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 472, -400, 472, -1268, 476, -396, 476, -1264, 480, -1260, 476, -1264, 480, -1260, 484, -388, 472, -396, 476, -1264, 480, -392, 480, -1260, 472, -1268, 476, -1264, 480, -1260, 484, -388, 472, -1268, 476, -9132, 3496, -1700, 468, -400, 472, -1268, 476, -396, 476, -396, 476, -392, 472, -400, 472, -396, 476, -396, 476, -392, 480, -392, 480, -388, 484, -388, 472, -396, 476, -1268, 476, -392, 480, -392, 480, -388, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 476, -396, 476, -392, 480, -1260, 480, -392, 484, -1256, 476, -1264, 480, -1260, 484, -1260, 472, -396, 476, -396, 476, -1264, 480, -388, 484, -1256, 476, -1268, 476, -1264, 480, -1260, 476, -392, 480, -1264, 480, -15636, 3500, -1696, 444, -424, 480, -1260, 452, -420, 480, -392, 472, -396, 476, -396, 476, -392, 480, -392, 480, -388, 484, -388, 484, -388, 472, -396, 476, -396, 476, -1264, 480, -388, 484, -388, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 476, -396, 476, -1264, 480, -392, 480, -388, 484, -388, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 472, -396, 476, -1264, 480, -1260, 484, -1256, 480, -1264, 476, -392, 480, -392, 472, -1268, 476, -392, 480, -1260, 484, -1260, 472, -1268, 476, -1264, 480, -392, 472, -1268, 472, -9112, 3496, -1696, 484, -388, 476, -1264, 476, -392, 480, -392, 480, -392, 480, -388, 476, -396, 476, -392, 480, -392, 480, -388, 484, -388, 484, -388, 472, -396, 476, -1264, 480, -392, 480, -388, 484, -388, 472, -400, 472, -396, 476, -396, 476, -392, 480, -392, 480, -388, 476, -1264, 480, -392, 480, -392, 480, -388, 480, -392, 472, -396, 476, -396, 476, -396, 476, -392, 480, -1260, 484, -388, 472, -1268, 476, -1264, 480, -1260, 472, -1268, 476, -396, 476, -396, 476, -1260, 476, -396, 476, -1264, 480, -1260, 472, -1268, 476, -1264, 480, -392, 480, -1260, 472, -9136, 3492, -1704, 476, -392, 480, -1260, 484, -388, 476, -396, 476, -392, 480, -392, 484, -384, 484, -388, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 472, -396, 476, -396, 476, -392, 480, -392, 480, -392, 472, -396, 476, -396, 476, -392, 476, -396, 476, -1264, 484, -388, 472, -396, 476, -396, 476, -392, 480, -392, 480, -388, 472, -400, 472, -400, 472, -1268, 476, -392, 480, -1260, 472, -1268, 476, -1264, 480, -1264, 472, -396, 476, -396, 472, -1268, 476, -392,



But for the curtain remote I got differnet outputs for same key press:

Code: [Select]
Raw: (33) 220, -3176, 196, -32600, 220, -3172, 200, -2064, 200, -4324, 200, -62000, 240, -6560, 208, -5432, 200, -23548, 292, -3120, 204, -2040, 220, -912, 240, -2020, 244, -904, 384, -732, 368, -760, 372,

Press the button on the remote now - once only

Raw: (21) 224, -3168, 208, -3188, 204, -2056, 208, -2060, 200, -24680, 220, -11088, 224, -60848, 216, -11092, 224, -24660, 216, -11092, 220,

Press the button on the remote now - once only

Raw: (79) 952, -180, 948, -184, 380, -752, 948, -160, 400, -752, 380, -752, 940, -172, 224, -2040, 200, -932, 200, -24696, 948, -184, 948, -184, 376, -752, 952, -180, 380, -752, 380, -752, 948, -160, 400, -752, 384, -748, 380, -752, 380, -748, 384, -59556, 948, -164, 968, -184, 376, -736, 968, -184, 376, -732, 400, -732, 968, -164, 400, -732, 396, -732, 224, -912, 200, -24676, 968, -164, 968, -164, 396, -736, 220, -912, 208, -2052, 212, -2052, 196,

Press the button on the remote now - once only


I'm going to try sending the raw panasonic signal and see what happens

juntao65

Okay update.

Once I put the raw array I got from AnaylsisIR's script into my sendraw script, the output on the serial monitor goes to gibberish. If I press a button on a remote, or press the button hooked upto my arduino, things output but it's complete gibberish.

Here's the script:

Code: [Select]
#include <IRremote.h>

int RECV_PIN = 11;
int BUTTON_PIN = 12;
int STATUS_PIN = 13;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(BUTTON_PIN, INPUT);
  pinMode(STATUS_PIN, OUTPUT);
}

// Storage for the recorded code
int codeType = -1; // The type of code
unsigned long codeValue; // The code value if not raw
unsigned int rawCodes[RAWBUF]; // The durations if raw
int codeLen; // The length of the code
int toggle = 0; // The RC5/6 toggle state

void storeCode(decode_results *results) {
  codeType = results->decode_type;
  int count = results->rawlen;
 
  Serial.print(count);
  Serial.println(" is the count.");

    Serial.println("Received unknown code, saving as raw");
    codeLen = results->rawlen - 1;
    for (int i = 1; i <= codeLen; i++) {
      if (i % 2) {
        // Mark
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
        Serial.print(" m");
      }
      else {
        // Space
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
        Serial.print(" s");
      }
      Serial.print(rawCodes[i - 1], DEC);
    }
    Serial.println("");
   
    // print array, just wnated to see if negatives get stored
    for (int i = 1; i <= codeLen; i++) {
      Serial.print(rawCodes[i - 1], DEC);
      Serial.print(" " );
    }
}

// the panasonic array
unsigned int rawCodesb[] = {1692, 480, 388, 480, 1260, 476, 396, 476, 392, 480, 392, 480, 392, 480, 388, 484, 388, 472, 396, 476, 396, 476, 392, 480, 392, 480, 392, 480, 1260, 472, 396, 476, 396, 476, 396, 476, 392, 480, 392, 480, 388, 484, 388, 472, 396, 476, 396, 476, 1264, 480, 388, 484, 388, 484, 388, 472, 396, 476, 396, 476, 392, 480, 392, 480, 392, 480, 1260, 472, 396, 476, 1268, 476, 1260, 484, 1260, 476, 1264, 476, 392, 480, 392, 480, 1260, 476, 396, 476, 1264, 476, 1264, 480, 1260, 476, 1264, 480, 392, 476, 1264, 480, 9104, 3468, 1728, 472, 396, 448, 1292, 480, 392, 448, 420, 488, 384, 484, 388, 452, 416, 448, 424, 448, 420, 452, 420, 452, 420, 452, 416, 452, 420, 444, 1296, 476, 392, 452, 420, 452, 416, 456, 416, 476, 396, 476, 392, 480, 392, 480, 388, 484, 388, 484, 1256, 476, 392, 448, 424, 448, 424, 480, 388, 484, 388, 452, 420, 452, 416, 444, 424, 448, 1296, 480, 388, 484, 1256, 476, 1264, 480, 1264, 480, 1260, 472, 396, 448, 424, 476, 1264, 480, 392, 448, 1292, 476, 1264, 476, 1264, 480, 1260, 476, 396, 484, 1256, 476, 9132, 3472, 1724, 476, 392, 480, 1260, 484, 388, 476, 392, 456, 416, 444, 428, 444, 424, 448, 424, 448, 420, 452, 420, 484, 384, 448, 424, 448, 420, 448, 1296, 480, 388, 484, 388, 472, 396, 476, 396, 476, 396, 476, 392, 480, 392, 480, 388, 484, 388, 476, 1264, 480, 392, 476, 392, 480, 392, 480, 388, 476, 396, 476, 392, 480, 392, 480, 388, 484, 1260, 480, 388, 476, 1264, 480, 1260, 484, 1260, 472, 1268, 476, 392, 480, 392, 480, 1260, 484, 388, 452, 1288, 476, 1264, 480, 1260, 484, 1256, 476, 396, 444, 1296, 480};

void sendCode(int repeat) {
  // Assume 38 KHz
  //irsend.sendRaw(rawCodes, codeLen, 38);
  irsend.sendRaw(rawCodesb, 298, 38);
  Serial.println("Sent raw");
 
}

int lastButtonState;

void loop() {
  // If button pressed, send the code.
  int buttonState = digitalRead(BUTTON_PIN);
  if (lastButtonState == HIGH && buttonState == LOW) {
    Serial.println("Released");
    irrecv.enableIRIn(); // Re-enable receiver
  }

  if (buttonState) {
    Serial.println("Pressed, sending");
    digitalWrite(STATUS_PIN, HIGH);
    sendCode(lastButtonState == buttonState);
    digitalWrite(STATUS_PIN, LOW);
    delay(50); // Wait a bit between retransmissions
  }
  else if (irrecv.decode(&results)) {
    digitalWrite(STATUS_PIN, HIGH);
    storeCode(&results);
    irrecv.resume(); // resume receiver
    digitalWrite(STATUS_PIN, LOW);
  }
 
  lastButtonState = buttonState;
 
}


After couple key presses on remote:
Code: [Select]
1?1?1?1010101?141?1010Pr%APr%ÿPrPrP?PrP²PrPr

When I press the button the output is too big to put here but it's complete gibberish. I'm guessing the problem is the unsigned int rawCodesb[] = can't handle that big of an array? Not sure...

AnalysIR

#11
Mar 24, 2014, 09:22 pm Last Edit: Mar 24, 2014, 09:25 pm by AnalysIR Reason: 1
See attached screen shot for a visual of your erod signals. The second green burst seems to be the closest to a real signal which matches one of the codes exactly, although the timings may be a bit out.

I have imported the raw signal dumps into AnalysIR & exported the useful codes for sendRAW with IRremote below, one for the panasonic and the best version of the erod captured.
If you look at the erod signals in the screenshot, the top centre one matches one of your codes (Close- 110100100000) and the others seem to be degraded version of the same signal.

So try sending both signals (not in the same sketch)
Code: [Select]
/*
Automatically Generated by AnalysIR - Batch Export Utility
Registered to: xxxxxxxx
Session History
Type : Key : Value : Bits
0 : JAPANESE : Pana1 : 40040100BCBD : 48
2 : RAW : erod1 :  : 0
*/

// NB: Not all protocols are supported by IRremote or IRLib. You may need to edit the code below manually
// Automatically Generated by AnalysIR for xxxxxxxx, visit http://www.AnalysIR.com or email info@....... for further details
int khz=38; //NB Change this default value as neccessary to the correct modulation frequency


unsigned int Signal_Pana1_0[] = {3496,1700,480,388,484,1256,476,396,476,392,480,392,480,392,480,388,476,396,476,392,480,392,480,388,484,388,484,384,484,1256,480,392,480,392,480,388,484,388,484,384,476,396,476,392,480,392,480,392,480,1260,484,384,476,396,476,392,480,392,480,392,480,388,484,388,476,392,480,1260,484,388,480,1260,476,1264,480,1260,484,1256,476,396,476,396,476,1264,480,388,484,1260,472,1268,476,1264,472,1268,476,392,480,1264,476}; //AnalysIR Batch Export - RAW

irsend.sendRaw(Signal_Pana1_0, sizeof(Signal_Pana1_0)/sizeof(int), khz); //AnalysIR Batch Export - RAW
// AnalysIR IR Protocol: JAPANESE, Key:  Pana1




unsigned int Signal_erod1_2[] = {,948,184,948,184,376,752,952,180,380,752,380,752,948,160,400,752,384,748,380,752,380,748,384}; //AnalysIR Batch Export - RAW

irsend.sendRaw(Signal_erod1_2, sizeof(Signal_erod1_2)/sizeof(int), khz); //AnalysIR Batch Export - RAW
// AnalysIR IR Protocol: RAW, Key:  erod1


Tip: if the erod one doesn't work try changing the khz value to 56, 40, and 36 instead of 38 (My bet is on 56kHz)

If all else fails I can look into re-constructing the timings for the erod, for more accuracy

juntao65

I may have messed up the pansonic output due to interference. Here is some more consistent output:

Code: [Select]
Press the button on the remote now - once only

Raw: (299) 3496, -1696, 472, -404, 468, -1268, 476, -396, 476, -392, 480, -392, 468, -400, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 476, -1264, 480, -392, 476, -392, 480, -392, 480, -392, 472, -400, 472, -396, 476, -392, 476, -396, 476, -396, 476, -1264, 472, -396, 476, -396, 476, -392, 480, -392, 476, -392, 480, -392, 480, -392, 472, -396, 476, -1264, 480, -392, 480, -1260, 484, -1256, 476, -1264, 480, -1264, 480, -388, 472, -400, 472, -1268, 476, -392, 480, -1260, 484, -1256, 476, -1268, 476, -1264, 480, -388, 484, -1256, 476, -9112, 3492, -1700, 480, -392, 476, -1264, 480, -392, 472, -396, 476, -396, 476, -392, 480, -392, 480, -388, 472, -400, 472, -400, 472, -396, 476, -396, 476, -396, 476, -1260, 484, -388, 472, -400, 472, -396, 476, -396, 476, -392, 480, -392, 480, -388, 484, -388, 472, -400, 472, -1268, 476, -392, 480, -392, 480, -392, 480, -388, 472, -400, 472, -396, 476, -396, 476, -392, 480, -1260, 484, -388, 472, -1268, 476, -1264, 480, -1260, 484, -1256, 476, -396, 476, -396, 476, -1264, 480, -388, 472, -1268, 476, -1268, 476, -1264, 480, -1260, 472, -396, 476, -1264, 480, -9132, 3488, -1704, 476, -396, 476, -1264, 480, -392, 468, -400, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 468, -400, 472, -400, 472, -396, 476, -1264, 480, -392, 480, -392, 480, -388, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 472, -1268, 476, -396, 472, -396, 476, -396, 476, -392, 480, -392, 472, -396, 476, -396, 476, -396, 476, -1260, 484, -388, 484, -1256, 476, -1264, 480, -1260, 480, -1264, 472, -396, 476, -396, 476, -1264, 480, -392, 476, -1260, 476, -1268, 476, -1264, 480, -1260, 484, -388, 472, -1268, 476,

Press the button on the remote now - once only

Raw: (299) 3492, -1704, 476, -396, 476, -1264, 480, -392, 468, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 476, -396, 476, -392, 480, -392, 476, -1264, 480, -392, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 480, -392, 472, -396, 476, -1264, 480, -392, 480, -392, 480, -388, 484, -388, 472, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 484, -388, 472, -1268, 476, -1264, 480, -1260, 484, -1256, 476, -396, 476, -396, 476, -1260, 484, -388, 472, -1268, 476, -1264, 480, -1260, 484, -1260, 472, -396, 476, -1264, 480, -9104, 3492, -1704, 476, -396, 476, -1264, 480, -388, 476, -396, 476, -392, 476, -396, 476, -396, 476, -392, 472, -400, 472, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 480, -392, 472, -396, 476, -396, 476, -392, 480, -392, 480, -392, 480, -388, 484, -388, 472, -396, 476, -1264, 480, -392, 480, -388, 484, -388, 472, -400, 472, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 472, -400, 472, -1268, 476, -1264, 480, -1260, 472, -1268, 476, -396, 476, -392, 480, -1260, 484, -388, 472, -1268, 476, -1264, 480, -1260, 484, -1256, 476, -396, 476, -1264, 480, -9128, 3492, -1704, 476, -396, 476, -1264, 480, -388, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 468, -400, 472, -400, 472, -396, 476, -396, 476, -1264, 480, -392, 472, -396, 472, -400, 472, -396, 476, -396, 476, -392, 480, -392, 480, -392, 472, -396, 472, -1268, 476, -396, 476, -392, 480, -392, 480, -392, 472, -396, 476, -396, 476, -392, 476, -396, 476, -1264, 480, -392, 472, -1268, 476, -1264, 480, -1260, 484, -1256, 476, -396, 476, -392, 480, -1260, 484, -388, 472, -1268, 476, -1264, 480, -1260, 484, -1256, 476, -396, 476, -1264, 480,

Press the button on the remote now - once only

Raw: (299) 3496, -1700, 468, -400, 472, -1268, 476, -396, 476, -392, 480, -392, 468, -404, 468, -400, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 472, -400, 472, -1268, 476, -392, 476, -396, 476, -392, 480, -392, 472, -400, 472, -396, 476, -396, 472, -396, 476, -396, 476, -1264, 480, -392, 472, -396, 476, -396, 476, -392, 480, -392, 476, -392, 480, -392, 480, -392, 472, -1268, 476, -392, 476, -1264, 480, -1260, 476, -1268, 476, -1264, 476, -392, 480, -392, 480, -1260, 476, -396, 476, -1264, 480, -1260, 480, -1260, 472, -1268, 476, -396, 476, -1264, 480, -9104, 3496, -1700, 476, -396, 468, -1268, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -388, 484, -388, 472, -396, 476, -396, 476, -1264, 480, -392, 480, -388, 472, -400, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 480, -1260, 472, -396, 476, -1264, 480, -1264, 480, -1260, 472, -1268, 476, -392, 480, -392, 480, -1260, 472, -400, 472, -1268, 476, -1264, 480, -1260, 472, -1268, 476, -396, 476, -1264, 480, -9128, 3492, -1704, 472, -396, 476, -1264, 480, -392, 480, -392, 472, -396, 476, -396, 472, -396, 476, -396, 476, -396, 476, -392, 480, -392, 472, -396, 476, -396, 476, -1264, 476, -396, 476, -392, 480, -392, 472, -396, 476, -396, 476, -392, 480, -392, 480, -392, 476, -392, 480, -1260, 476, -396, 476, -396, 476, -392, 480, -392, 476, -392, 480, -392, 472, -396, 476, -396, 476, -1264, 480, -392, 480, -1260, 472, -1268, 476, -1264, 480, -1260, 480, -392, 472, -396, 476, -1264, 480, -392, 480, -1260, 480, -1260, 476, -1264, 480, -1260, 484, -388, 480, -1260, 476,

Press the button on the remote now - once only


I am testing your code out right now anyways though. will update

juntao65

#13
Mar 24, 2014, 10:48 pm Last Edit: Mar 24, 2014, 10:49 pm by juntao65 Reason: 1
Okay we're getting somewhere!!

Signal_Pana1_0 turned on my panasonic TV! I used 38 khz.

Unfortunately I couldn't get my electric blinds to move. I used both Signal_Pana1_0 and Signal_erod1_2, as well as each of the suggested frequencies : 36, 38, 40, 56.

I feel we're so close man! I really appreciate you taking the time to help me out AnalysisIR. Let me know what you need from me to make more accurate measurements.

Anyways here's the code I used in case of silly mistakes:

Code: [Select]
#include <IRremote.h>

int RECV_PIN = 11;
int BUTTON_PIN = 12;
int STATUS_PIN = 13;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
 Serial.begin(9600);
 irrecv.enableIRIn(); // Start the receiver
 pinMode(BUTTON_PIN, INPUT);
 pinMode(STATUS_PIN, OUTPUT);
}

// Storage for the recorded code
int codeType = -1; // The type of code
unsigned long codeValue; // The code value if not raw
unsigned int rawCodes[RAWBUF]; // The durations if raw
int codeLen; // The length of the code
int toggle = 0; // The RC5/6 toggle state

void storeCode(decode_results *results) {
 codeType = results->decode_type;
 int count = results->rawlen;
 
 Serial.print(count);
 Serial.println(" is the count.");

   Serial.println("Received unknown code, saving as raw");
   codeLen = results->rawlen - 1;
   for (int i = 1; i <= codeLen; i++) {
     if (i % 2) {
       // Mark
       rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
       Serial.print(" m");
     }
     else {
       // Space
       rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
       Serial.print(" s");
     }
     Serial.print(rawCodes[i - 1], DEC);
   }
   Serial.println("");
   
   // print array, just wnated to see if negatives get stored
   for (int i = 1; i <= codeLen; i++) {
     Serial.print(rawCodes[i - 1], DEC);
     Serial.print(" " );
   }
}

// the panasonic array
//unsigned int rawCodesb[] = {1692, 480, 388, 480, 1260, 476, 396, 476, 392, 480, 392, 480, 392, 480, 388, 484, 388, 472, 396, 476, 396, 476, 392, 480, 392, 480, 392, 480, 1260, 472, 396, 476, 396, 476, 396, 476, 392, 480, 392, 480, 388, 484, 388, 472, 396, 476, 396, 476, 1264, 480, 388, 484, 388, 484, 388, 472, 396, 476, 396, 476, 392, 480, 392, 480, 392, 480, 1260, 472, 396, 476, 1268, 476, 1260, 484, 1260, 476, 1264, 476, 392, 480, 392, 480, 1260, 476, 396, 476, 1264, 476, 1264, 480, 1260, 476, 1264, 480, 392, 476, 1264, 480, 9104, 3468, 1728, 472, 396, 448, 1292, 480, 392, 448, 420, 488, 384, 484, 388, 452, 416, 448, 424, 448, 420, 452, 420, 452, 420, 452, 416, 452, 420, 444, 1296, 476, 392, 452, 420, 452, 416, 456, 416, 476, 396, 476, 392, 480, 392, 480, 388, 484, 388, 484, 1256, 476, 392, 448, 424, 448, 424, 480, 388, 484, 388, 452, 420, 452, 416, 444, 424, 448, 1296, 480, 388, 484, 1256, 476, 1264, 480, 1264, 480, 1260, 472, 396, 448, 424, 476, 1264, 480, 392, 448, 1292, 476, 1264, 476, 1264, 480, 1260, 476, 396, 484, 1256, 476, 9132, 3472, 1724, 476, 392, 480, 1260, 484, 388, 476, 392, 456, 416, 444, 428, 444, 424, 448, 424, 448, 420, 452, 420, 484, 384, 448, 424, 448, 420, 448, 1296, 480, 388, 484, 388, 472, 396, 476, 396, 476, 396, 476, 392, 480, 392, 480, 388, 484, 388, 476, 1264, 480, 392, 476, 392, 480, 392, 480, 388, 476, 396, 476, 392, 480, 392, 480, 388, 484, 1260, 480, 388, 476, 1264, 480, 1260, 484, 1260, 472, 1268, 476, 392, 480, 392, 480, 1260, 484, 388, 452, 1288, 476, 1264, 480, 1260, 484, 1256, 476, 396, 444, 1296, 480};
//unsigned int Signal_erod1_2[] = {948,184,948,184,376,752,952,180,380,752,380,752,948,160,400,752,384,748,380,752,380,748,384}; //AnalysIR Batch Export - RAW
unsigned int Signal_Pana1_0[] = {3496,1700,480,388,484,1256,476,396,476,392,480,392,480,392,480,388,476,396,476,392,480,392,480,388,484,388,484,384,484,1256,480,392,480,392,480,388,484,388,484,384,476,396,476,392,480,392,480,392,480,1260,484,384,476,396,476,392,480,392,480,392,480,388,484,388,476,392,480,1260,484,388,480,1260,476,1264,480,1260,484,1256,476,396,476,396,476,1264,480,388,484,1260,472,1268,476,1264,472,1268,476,392,480,1264,476}; //AnalysIR Batch Export - RAW

void sendCode(int repeat) {
 // Assume 38 KHz
 //irsend.sendRaw(rawCodes, codeLen, 38);
 //irsend.sendRaw(Signal_erod1_2, sizeof(Signal_erod1_2)/sizeof(int), 38);
 irsend.sendRaw(Signal_Pana1_0, sizeof(Signal_Pana1_0)/sizeof(int), 38);
 Serial.println("Sent raw");
 
}

int lastButtonState;

void loop() {
 // If button pressed, send the code.
 int buttonState = digitalRead(BUTTON_PIN);
 if (lastButtonState == HIGH && buttonState == LOW) {
   Serial.println("Released");
   irrecv.enableIRIn(); // Re-enable receiver
 }

 if (buttonState) {
   Serial.println("Pressed, sending");
   digitalWrite(STATUS_PIN, HIGH);
   sendCode(lastButtonState == buttonState);
   digitalWrite(STATUS_PIN, LOW);
   delay(50); // Wait a bit between retransmissions
 }
 else if (irrecv.decode(&results)) {
   digitalWrite(STATUS_PIN, HIGH);
   storeCode(&results);
   irrecv.resume(); // resume receiver
   digitalWrite(STATUS_PIN, LOW);
 }
 
 lastButtonState = buttonState;
 
}

AnalysIR

OK, I did some extra analysis on the signal and came up with the following 'extrapolated' timings.

Replace the timings in the erod signal as follows:
(replace the first value with the second, such that the only timings are 850 and 290 in the signal)
Code: [Select]
948 --> 850
184 290
948 850
184 290
376 290
752 850
952 850
180 290
380 290
752 850
380 290
752 850
948 850
160 290
400 290
752 850
384 290
748 850
380 290
752 850
380 290
748 850
384 --> 290

Again try all of the frequencies.
If that doesn't work, then I suggest you get a 56kHz IRreceiver, which is my best guess,for you,  at this stage.

PS: it looks like I left a comma at the start of the erod signal last time (but you seem to have removed it which was correct)

Go Up