A bit of a story here: I would like to be able to quickly and easily turn on/off captioning on the cable TV box. Normally this would require 10(!) button presses.

It's hard to be sure, but I expect that no commonly available universal remote control can be programmed to automate 10 button presses.

Having formal training in electronics, I easily used an Arduino to record all the necessary IR signals (via a sensor/demodulator) to accomplish the function.

My first attack on this problem was to make a program running on an Arduino that would accomplish this function. It worked, but it's such an over-kill... Also, you need to wait for it to boot (1? second). Edit: I could try modifying the board to shorten this boot time.

I don't have an EPROM burner, otherwise I would wonder about clocking a counter at 38 kHz and addressing an EPROM and using 1 bit to operate an IR LED (via a 2N2222).

If I were to stick with an Arduino, I think I would use the PWM to make the pulses. (Before I enabled a 555 astable which did the driving).

What is the easiest way to get this done?

  • \$\begingroup\$ The easiest way to get it done has been done by you using an arduino. Maybe the word "easiest" needs to be re-thought? \$\endgroup\$
    – Andy aka
    May 16, 2014 at 15:20
  • \$\begingroup\$ Every time I've thought about solving this problem myself (for my 90 year old mother's TV) I've always been frustrated by the inability to query the status of the TV. Specifically: - My Arduino "presses" the controller button. - Did the TV actually "see" the IR pulse? - Did the TV correctly change the channel, etc? THAT feedback seems to be the heart of these TV automation problems. When TV manufactureres start manufacturing TVs with a queryable "Status" port, that'll be a game-changer. \$\endgroup\$
    – user35075
    May 16, 2014 at 15:38
  • \$\begingroup\$ Note: you can burn the AVR using Arduino itself. About burning the AVR using a Arduino: Arduino Homepage, Notes about a Bug that should have been solved now \$\endgroup\$ May 17, 2014 at 7:31
  • \$\begingroup\$ What's your actual problem? You're asking for 1) modulation and 2) you mentioned you were using an Arduino and "it's such an over-kill". Why would it be overkill? Take one step backward, is 1s boot time really a problem for your setup? You're saving yourself ~10s manual, annoying button presses! In another project I used a 555 for the carrier and modulated it using the Arduino. Generating the carrier in software is also fine since - in your case - sequencing those keys is the only thing the microcontroller will do - isn't it? \$\endgroup\$ May 17, 2014 at 7:48
  • \$\begingroup\$ Perhaps not the easiest, but an alternative approach is to use your Arduino to record all the existing remote sequences and then systematically try transmitting all the intervening ones. You may get lucky and discover an undocumented "toggle captions" function code. \$\endgroup\$
    – aja
    May 17, 2014 at 13:35

3 Answers 3


I would recommend TV-B-Gone Kit and modify their available firmware to match the code sequence you would like to output


I would recommend you use a cheap microcontroller with internal clock and bitbang the protocol on one output pin.

enter image description here

To identify the protocol you can try this Decode an infrared signal with an IR demodulator inside a microphone jack

Here is a list of IR protocols: SB-Projects.


This is a bit opinion-based, but IMO the easiest way is to identify the protocol and button sequence, and then program a micro-controller to emit the sequence. Any uC can be programmed to do this.

When someone asks for 'the easiest way to do something' it is always a problem that what is easy for one person might not be easy for another one. This can of course be solved with a clock generator, counter, (e)eprom... But then you are half-way to building your own controller!


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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