I'll try to explain. But be forewarned that I do not always use the proper terminology. And I am still learning from the masters on this forum. 
I do read the signal from the receiver.
But I believe it is more accurate to call it PPM, Pulse Position Modulation. Here is a discussion of the matter:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1253149521 Post #6
pulsein is not ideal for this application. It is blocking, meaning that other actions cannot occur while waiting for the signal to complete.
Instead, I use the pairs of interrupt routines for each RC channel.
Lets look at one RC channel.
void setup()
{
attachInterrupt(Chan1Interrupt, Chan1_begin, RISING);
This tells the Arduino to fire the Chan1_begin routine when the pin changes from low to high. Read the reference for which pins. My Mega has 6, others have 2. http://www.arduino.cc/en/Reference/AttachInterrupt
So, I have channel 1 from my receiver connected to pin 18. When that pin changes from low to high, the Arduino fires the Chan1_begin routine.
void Chan1_begin() // enter Chan1_begin when interrupt pin goes HIGH.
{
Chan1_startPulse = micros(); // record microseconds() value as Chan1_startPulse
detachInterrupt(Chan1Interrupt); // after recording the value, detach the interrupt from Chan1_begin
attachInterrupt(Chan1Interrupt, Chan1_end, FALLING); // re-attach the interrupt as Chan1_end, so we can record the value when it goes low
}
This captures the time in a variable Chan1_startPulse.
Then it takes off the interrupt watching for the pin to go high, and attaches a different interrupt watching for the pin to change from high to low (falling). That routine is Chan1_end
void Chan1_end()
{
Chan1_val = micros() - Chan1_startPulse; // when interrupt pin goes LOW, record the total pulse length by subtracting previous start value from current micros() vlaue.
detachInterrupt(Chan1Interrupt); // detach and get ready to go HIGH again
attachInterrupt(Chan1Interrupt, Chan1_begin, RISING);
if (Chan1_val < 1000 || Chan1_val > 2000) { Chan1_val = Chan1_val_last;}
else {Chan1_val_last = Chan1_val;}
}
Capture the time, swap the interrupts back, do one bit of error checking to make sure the range is withing acceptable bounds, and place the result in Chan1_val (declared Volatile). The error checking might not belong here. But it works for now.
So, this entire process consists of:
- start watching the pin to go high
- recording the time when it does
- start watching for the pin to go low
- computing the duration between when it went high and when it went low
That process happens 50 times a second (the frame rate of a typical RC servo signal)
And this method only uses a few CPU cycles. OK, I do not know the actual overhead of calling Interrupt Service Routines, but the number is relatively low.
Pulsein locks up the CPU for the entire duration of the signal.
For your code, since you do not have a Mega, you will likely want to use these pin definitions (from the reference)
numbers 0 (on digital pin 2) and 1 (on digital pin 3) I am using number 1 for RC channel 5, but truthfully I have not looked at the results. I will try a 2 channel input using just numbers 0 and 1 to see what it does. But not tonight. zzzzz.........
Gosh, I wrote a book! 