Just making this post to present this project I created called SequenceDecoder. It uses Arduino + Processing to read different types of signals from the Arduino, and displays a graphic representation, analyzing pattens and generating Arduino code automatically to handle those signals.http://sequencedecoder.weebly.com/
It helps understanding and using different wireless types of data transmission (using either infrared or radio signals). Using an Arduino and the right type or receiver/emitter , it's easy to analyse and reproduce signals coming from different types of remote controllers, such as TV's, multimedia centers, air conditioning, home domotics, garage door openers...
Along with SequenceDecoder, there is also an Arduino library called WirelessController to easily send and/or receive commands after they have been decoded.
And finally, Ardomote is a project build upon the WirelessController library, that easily creates an universal remote controller using an Arduino Ethernet.
Motivation for using this project:
There are other libraries out there that already allow an Arduino to send or receive commands from remote controllers. So what it the advantage of using SequenceDecoder + WirelessController?
- Supports both infrared and radio controllers. All of the libraries I found online are aimed only infrared controllers. This is the most common in audio and video equipament. However, when the devices are too far away from the controllers, or aren't in line of sight, radio is the only option. Devices like domotic controllers, thermostats, garage door openers typically use radio.
- Adapts to new unknown protocols. The usual approach when creating these types of libraries has been creating the basic library and then creating some sort of database with the most common protocols (usually focusing on multimedia devices). This might be more efficient, but less flexible. When encountering a device not on the list, either you need to find out the protocol yourself and change the library to support it, or it won't work. Also since these libraries focus on multimedia devices, if you want to use something other than a TV or a specific media player, it won't probably be supported.
- Easily learn and study the protocols. This was actually my first motivation. When you use a library that already supports your device, that's great. You can just say "Ok I have a Sony TV and I want to control it" and it will probably work. But if you're not sure of your device type, or even if you do but for some reason it doesn't seem to work, then you are completely in the dark. You have no idea if what you are transmitting or receiving is anywhere near what it was supposed to be. SequenceDecoder can help here... It shows you a visual representation of the signals and automatically analyses the information. You can easily compare the signals sent by your original remote control with the ones sent by your Arduino (assuming you have a second arduino to install SequenceReader).
Easily create your own protocol. Let's say you have a project where for some reason you need to send 7 bytes of information using infrared, or another where you need to send 15 bytes on information using radio... With WirelessController, you just need to edit 6 lines of code to create a custom protocol and start sending and receiving messages.
- Non-blocking readings. This is not an unique feature to WirelessController, but it does not appear in all the other libraries I found. Non-blocking readings mean that when we are waiting for commands, the Arduino will not be stuck when readings commands. This is a great advantage, because it means we can use one Arduino to send and/or receive commands from different controllers at the same, or have it doing some other tasks while waiting for a command.