IRLib Updated to Version 1.5

We are pleased to announce that IRLib has been updated to version 1.5. IRLib is a library for Arduino-based microcontrollers that allows for the receiving, decoding, and sending of infrared signals. These new changes are a step forward in making the library less hardware platform dependent so that it can be more easily used by a variety of microcontrollers. These changes include…

  • New bit-bang option for PWM output frequency setting. Now can use any output pin with no hardware timers. Note:bit-bang output not as accurate as timer-based frequency selection.
  • Major rewrite of IRLibTimer.h to facilitate bit-bang. Separated hardware timer selection and specification into sending and receiving sections in order to implement bit-bang.
  • New IRfrequency class for detecting input frequencies. Previously was a stand-alone special sketch but now is a class including a DumpResults method.
  • New IRfreq and IRrecvDumpFreq illustrate simultaneous detection of frequency and pattern with both an IR learner and IR receiver is connected.
  • New #define USE_IRRECV define can be commented out to completely remove the interrupt driven IRrecv receiver class from the library. This resolves ISR conflicts with other libraries such as Tone() when not using IRrecv class.
  • New #define USE_DUMP define can be commented out to disable DumpResults methods. Saves code space when these methods are not needed.
  • Revised user manuals to document new features and correct previous documentation problems.

Note: The included user manual update is not yet available on the website at but it will be updated shortly. New user manual is available with the library itself as a Microsoft Word .docx file as well as PDF and EPUB versions.
This library is available on GitHub at . For more information on this library see

13 thoughts on “IRLib Updated to Version 1.5

  1. Hi,

    I am trying to implement my own hash decode on an Attiny 85 however I am not having much luck. Is it possible to use your library or a potion of it to receive an IR code and formulate a unique code for it? It doesn’t have to decode it down to the protocol just create the unique code.



    • There is a hash coding a routine in the library. One of the next things on my to-do-list is to do some testing with the ATtiny85. My library is a little bit big so it may not fit on such a small processor. I did recently added an option to disable some of the serial text output features which should reduce code size when those features are not needed. Worst-case scenario is you can just look at the hash code and possibly adapt it yourself.

  2. Hi, and thanks for the great library!

    Does IRLib support ProntoEdit Hex Format Codes?
    If it does, how can I use it?
    If not, would you please add it to the 1.6 version of IRLib?


    • We do not directly support ProntoHex codes because it’s a bit difficult to determine both the frequency and the pattern of a received signal at the same time, using limited capabilities of Arduino. Also, those codes are much longer than the codes that we use and therefore take up more space. Their advantage, however, is that they will work for any received signal, and not just those protocols that we support. Were working on a method to decode both the frequency and the pulse pattern at the same time.

      It’s much more likely that we could support the output of Pronto codes. We’re looking into that possibility.

      • Actually I meant sending a ProntoHex code.
        I’m designing an arduino-based universal IR remote, and so far It works great.
        But I need a general database, and I found
        The only problem is that the IR codes are in Pronto Hex format. I don’t like this format either.
        There are some codes that actually send Pronto Hex (you can Google for them) but I rather use IRLib library. 🙂
        So, if you could analyse the current codes for “Arduino Send Pronto Hex” and implant a version as the IRLib protocol, it would be really appreciated.

  3. Hi,

    You can control a air conditioning with your library? a/c is different because the range is longer that other devices not?

    • We do not support directly any air-conditioning protocols. Some people have adapted library for their own particular type of AC unit but they generally need to increase the buffer size. Because I don’t have any way to tests the code I’ve never tried to support it. So I won’t be much help if you tried to do it yourself. I wish I could do more but I just don’t have any equipment that uses those kinds of codes.

  4. Congratulation for the library that work perfect !
    Now a test IRLib with UDP packets, and it seem there is problem
    the hardware is Arduino UNO & Ethernet shield,
    Have you idea about some possible conflict ?
    Thanks in advance for your advice


  5. Hello! And thank you for your great library….. Sorry for my bad english, I am French.
    I read that it is possible to have multiple IR sensor but i can’t make it go on…. I tried :
    IRrecv My_Receiver11(11);
    IRdecode My_Decoder11;
    IRrecv My_Receiver10(10);
    IRdecode My_Decoder10;

    But only the last Receiver pin is checked in my loop code…. Can you help me please ?
    Thank you

  6. Hi have just put IRLib_master into my Arduino library and your Sketches work fine with it. However I am trying to use it with an Arduino Sketch that I have written operate a digital clock I have put together. It incorporates a RTC clock chip,a 7seg 4digit LCD to display time and an I2C driven 20 x4 LCD display for mesage display. The Sketch compiles and runs OK. If I try to incorporate IRLib into the Sketch it compiles Ok but it will not run and the display remain blank. Can you suggest what may causing the conflict. ?

    • Check out the documentation on how my library uses built-in hardware timers and interrupts. On an Arduino Uno it defaults to hardware TIMER2 and the associated interrupts. If your RTC makes use of those then it could be interfering. I’ve use the library with 20×4 LCD displays using I2C with no problem so I know that’s not the cause. You could try modifying my library to use TIMER1 and see if that helps. Details are in the documentation.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.