[tutorial] IRRemoteControl

IRRemoteControl Tutorial from codebender on Vimeo.

IRRemoteControl is a wrapper on the IRremote library by Ken Shirriff. IRremote aims to handle the communication between remotes, Arduinos, and devices controlled with IR. IRRemoteControl, on the other hand, doesn't add anything on that part, but all it does is help you structure your code better. All you have to do is define a function, match it with a button, and you are done.


The library has been set up for the IR Remote Control from Sparkfun.

The library has two accompanying examples, IRControlTest and IRLEDStrip. You can use the IRControlTest example to check that everything is working properly, and the IRLEDStrip example to set up your remote for controlling an addressable LED strip.

We will examine the first example to get introduced to the interface of the library, and then we will look at the IRLEDStrip example to see how the remote operates with an LED strip.

First, make the following connections. You will need the LED strip for the second example. Please read the notes on this page from Adafruit for powering the NeoPixels. (Personally, I was lucky enough in my experimentation to damage only 3 of the NeoPixels and not the whole strip.)



The code, as you can see, is very short. At the beginning, we make sure to include the necessary libraries (lines 8,9), we declare the IR receiver pin (line 11) and then we create an IRRemoteControl instance (line 14).

Inside setup, we call enable to start the receiver (line 18) and then we match buttons with functions (lines 19-27) that we will have to have defined earlier (lines 39-47). We do this by calling the pair method. Its first argument is the button and the second argument is the name of the function to pair with the button.

Inside loop, we call check (line 36) to see if we have received any data, and if so, the data will get decoded and the appropriate function will be called.

The functions you will define for the buttons will have to take no arguments and return no value. If you want to pass or return a variable to a function, declare it as a global variable. You can see examples of this on the IRLEDStrip example.


The idea here is the same as before. So now I will just explain how to buttons act on the LED strip and let you verify that by reading the code.

The POWER button turns the strip on and off.

The A, B, C buttons set a red, green, and blue color on the strip, respectively.
If we press an A-B-C sequence with successive button presses executed within 1 second, this adds the corresponding values and lets us set our own color. Pressing A-B gives yellow. Pressing A-C gives magenta. Pressing B-C gives cyan. And pressing A-B-C gives white.

The SELECT button sets a random color.

The LEFT and RIGHT buttons display a window on the rainbow colors and shift this window in opposite directions.

And finally the UP and DOWN buttons, increase and decrease brightness on the strip, respectively.

That's all folks. We hope you enjoy the library, and if you have any comments or suggestions you can contact us at girder [at] codebender [dot] cc

Sounds are from freesound.org. Schematics were based on Fritzing.