RPi Quadcopter blog

RPi Quadcopter blog
Click to open

Jun 2, 2011

Samsung remote IR-codes

The IRremote library could not parse samsung infrared data, but here's the raw codes with examples how to send them. I only read the most used buttons. Codes are already in variables :)

Codes:

// Power ON/OFF
const unsigned int S_pwr[68]={4600,4350,700,1550,650,1550,650,1600,650,450,650,450,650,450,650,450,700,400,700,1550,650,1550,650,1600,650,450,650,450,650,450,700,450,650,450,650,450,650,1550,700,450,650,450,650,450,650,450,650,450,700,400,650,1600,650,450,650,1550,650,1600,650,1550,650,1550,700,1550,650,1550,650};

// channel 1 
const unsigned int S_1[68]={4650,4300,700,1550,700,1550,650,1550,700,400,700,400,700,400,700,450,700,400,700,1500,700,1500,700,1550,700,450,650,400,700,450,650,450,700,400,700,400,700,450,650,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,450,650,1550,700,1550,650,1550,700,1500,700,1550,650};

// channel 2
const unsigned int S_2[68]={4600,4350,650,1550,700,1500,700,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1500,700,1550,700,400,700,450,650,450,700,400,700,400,700,1500,700,400,700,1550,700,400,700,400,700,450,650,450,700,400,700,400,700,1550,650,450,700,1500,700,1550,650,1550,700,1500,700,1550,650};

// channel 3
const unsigned int S_3[68]={4600,4350,700,1500,700,1550,650,1600,650,400,700,450,700,400,700,400,700,400,700,1550,650,1550,700,1500,700,400,700,450,700,400,700,400,700,400,700,400,700,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,700,400,700,400,700,1550,650,1550,700,1500,700,1550,700,1500,700};

// channel 4
const unsigned int S_4[68]={4600,4350,650,1550,700,1500,700,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,450,650,450,700,400,700,400,700,400,700,400,700,450,650,1550,700,400,700,400,700,450,700,400,700,1500,700,1550,650,1550,700,400,700,1550,650,1550,700,1500,700,1550,650};

// channel 5
const unsigned int S_5[68]={4650,4350,700,1500,700,1550,650,1550,700,400,700,450,700,400,700,400,700,400,700,1500,700,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,700,400,700,400,650,1550,700,450,650,450,700,400,700,450,650,450,650,1550,650,1550,700,400,700,1550,700,1500,700,1500,700,1550,700};

// channel 6
const unsigned int S_6[68]={4600,4350,650,1550,700,1500,700,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,450,700,400,700,400,700,400,700,400,700,1550,700,400,700,1500,700,450,650,450,700,400,700,400,700,1550,650,450,650,1550,700,400,700,1550,650,1550,700,1500,700,1550,650};
 
// channel 7
const unsigned int S_7[68]={4600,4350,700,1500,700,1550,650,1550,700,400,700,450,700,400,700,400,700,400,700,1550,650,1550,700,1500,700,400,700,450,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,450,700,400,700,400,700,450,650,1550,650,1550,700,450,650,400,700,1550,700,1500,700,1550,650,1550,700};
 
// channel 8
const unsigned int S_8[68]={4600,4350,650,1600,650,1500,700,1550,700,400,700,400,700,400,700,450,700,400,700,1500,700,1550,650,1550,700,400,700,450,650,450,700,400,700,400,700,1550,650,450,650,1550,700,1500,700,450,700,400,700,400,700,400,700,400,700,1550,700,400,700,450,650,1550,650,1550,700,1500,700,1550,650};
 
// channel 9
const unsigned int S_9[68]={4600,4350,700,1500,700,1550,650,1550,700,400,700,450,650,450,650,450,700,400,700,1500,700,1550,700,1550,650,400,700,450,700,400,700,400,700,400,700,450,650,1550,650,1600,650,1550,650,450,700,400,700,400,700,400,700,1550,700,400,700,400,700,400,700,1550,700,1500,700,1500,700,1550,700};
 
// channel 0
const unsigned int S_0[68]={4650,4300,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1550,650,1550,700,400,700,400,700,400,700,450,700,400,700,1550,650,400,700,450,700,400,650,1550,700,400,700,450,700,400,700,400,700,1500,700,1550,700,1500,700,400,700,1550,650,1550,700,1500,700};
 
// source
const unsigned int S_scr[68]={4600,4350,700,1550,650,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,400,700,400,700,1550,700,400,700,450,650,450,650,450,700,400,700,400,700,400,700,450,650,1550,700,1500,700,1550,650,1550,700,1500,700,1550,700,1500,700};
 
// channel up
const unsigned int S_pup[68]={4600,4350,700,1500,700,1500,700,1550,700,450,650,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,450,650,450,700,400,700,400,700,400,700,400,700,1550,700,400,700,400,700,1550,650,450,700,400,700,400,700,1550,650,450,650,1600,650,1550,650,450,700,1500,700,1500,700,1550,650};
 
// channel down
const unsigned int S_pdown[68]={4650,4300,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,700,400,700,400,700,400,700,450,650,450,650,1550,700,400,700,450,650,400,700,1550,700,1500,700,1550,700,1500,700,400,700,1550,650,1550,700,1500,700};
 
// volume up
const unsigned int S_vup[68]={4600,4350,650,1550,700,1500,700,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,450,700,400,700,400,700,400,700,450,650,450,650,450,650,1550,700,1500,700,1550,700,1500,700,1550,650};

// volume down
const unsigned int S_vdown[68]={4600,4350,700,1550,650,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,450,650,1550,700,400,700,400,700,450,700,400,700,400,700,400,700,1550,700,400,700,1500,700,1500,700,1550,700,1500,700};

// TV/DTV
const unsigned int S_tv[68]={4600,4350,650,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,700,400,700,1500,700,1500,700,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,700,400,700,400,700,400,700,400,700,1550,700,400,700,400,700,400,700,1550,700,1500,700,1550,650,1550,700,400,700,1500,700};
 
// guide
const unsigned int S_guide[68]={4600,4350,700,1500,700,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,650,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,700,1500,700,1550,650,1550,700,400,700,400,700,1550,700,400,700,400,700,400,700,450,700,400,650,1550,700,1550,650,450,700,1500,700};

// exit
const unsigned int S_exit[68]={4650,4300,700,1550,650,1550,700,1550,700,400,700,400,700,450,650,450,650,450,650,1550,700,1500,700,1550,700,450,650,400,700,450,650,450,700,400,700,1500,700,400,700,1550,700,1500,700,400,700,1550,700,450,650,400,700,450,650,1550,700,400,700,400,700,1550,650,450,650,1550,700,1500,700};
 
// mute
const unsigned int S_mute[68]={4650,4350,650,1550,650,1550,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,1550,700,400,700,450,650,400,700,450,700,400,700,1500,700,1550,650,1550,700,1500,700,450,700,400,700,400,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,1500,700};

Sending:

Irsend.sendRAW(S_pwr,68,38);

Remote will probably work in all samsung models, but with LE40M8 for sure.

22 comments:

  1. Hi,

    You can use IRSend with Samsung.

    See http://www.maartendamen.com/2010/05/jeenode-infrared-project-part-1-getting-started/

    and, in http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html, find by "samsung" and it explains how to use samsung codes.

    ReplyDelete
  2. Hi, i cant seem to get the raw data from my samsung remote...

    How did you achieve this?

    Thanks, Samuel

    ReplyDelete
  3. I managed to decode Samsung Air conditioner codes.
    My results are at:

    https://docs.google.com/spreadsheet/ccc?key=0Aupzmp8AqC8JdGtNOXhUc0R0WC1hbVdRa0p3aDVxdFE#gid=0

    anyway, I'm not able to compute the checksum (2 byte of every burst). If anyone figured it out, please let me know.

    ReplyDelete
    Replies
    1. Hey!
      Your results will make more sense if you (1) invert 0/1 bits, (2) interpret data so that LSB are transmitted first. Then at least temperature will look better (that half-byte is just offset from its minimum temperature of 16C).


      I do not see any checksum there: consider t=21 and t=22 commands, except for the temperature-related bits there's no difference at all. Although its not quite clear what is in the second byte of the second package, which changes usually but not always with t change.

      /Dmitry.

      Delete
    2. Or I see -- the checksum is lousy enough to count just bits regardless of their position. This explains :)

      Delete
  4. This comment has been removed by the author.

    ReplyDelete
  5. Hello, have you got the other button codes please ?
    Actually i need to scan some channel on my tv and i lost my remote.

    Thanks a lot :)

    ReplyDelete
  6. Hi
    I do not understand the raw data,all i know that for samsung the data is 32 bit (data+address) plus one start bit and one stop bit, for example for Samsung TV press"1" button in HEX as follows: FB040707 which will be sent from LSB to MSB as follows
    the original ordering is from MSB to LSB
    1111 1011 0000 0100 0000 0111 0000 0111
    sending code in reversed order is
    start bit +1110 0000 1110 0000 0010 0000 1101 1111+stop bit
    so how to understand the codes above??? please help

    ReplyDelete
  7. Got it
    the first two numbers represents the start bit ON & OFF durations
    the last number is ON for stop bit
    so the code will be started from the third number to the number before the last number....Here is the decoding procedure:

    Since for Samsung IR coding....
    Start bit: 4500us ON 4500us OFF
    Logic "1": 560us ON 1690us OFF
    Logic "0": 560us ON 560us OFF
    Stop bit : 560us ON 560us OFF

    for example:to decode Power ON/OFF
    4600,4350 is the starting bit
    700,1550 is "1" also for 650,1550...650,1600
    650,450 is "0" also for 700,450....700,400
    so the transmitting code is start bit+ "1110 0000 1110 0000 0100 0000 1011 1111" + stop bit......i tried these codes for Power ON/OFF, Volume Up, Volume down, Source input and button "1" and tested successfully on my LCD TV/PC/component monitor
    Anyway thanks for the great work

    ReplyDelete
  8. What is the frequency used by samsung remotes?

    ReplyDelete
  9. The 38 in the example given

    Irsend.sendRAW(S_pwr,68,38);

    means that the frequency is 38KHz

    ReplyDelete
  10. Could someone post the code of the PIP key?

    ReplyDelete
  11. Thank you soo much for these codes! they work! :)

    ReplyDelete
  12. can someone please tell me what exactly raw codes are?? I am a novice at all this.. please help! :) Thanx

    ReplyDelete
  13. do you have similar raw codes for Panasonic?

    ReplyDelete
  14. hey thanks.................;)
    really worked for me.When sending hex codes samsung tv was not responding but sending the raw data it works.......

    ReplyDelete
  15. thanks a lot :)
    works fine with t22c300 TVmonitor

    ReplyDelete
  16. Works for me too on my Samsung tv! Really would like to know how to record the raw codes for Samsung. I need it to get the codes for the 'SOURCE' button on my remote, which pops up a submenu on the tv showing options for 'TV', 'HDMI1', 'HDMI2'. Are these 2 separate raw codes to send: one for the 'source' button and one for the related submenu option. Or is it one direct code for the submenu option?

    ReplyDelete
  17. Bluefield Spare Remote Control for Samsung LED Televisions Buy Online In Dubai in Just 49.00 AED Free Delivery.
    !! ~ BUY ONLINE NOW ~ !!
    Spare Remote Control For Samsung | Spare Remote Control For LCD

    ReplyDelete
  18. dose anyone have the entire code please I need some help and wht pin is the ir the led on thanks

    ReplyDelete