Non Blocking Comm for 2 Arduinos Chatting??

I've tried refreshing an LED matrix AND reading in serial from my IR remote ... in the end the matrix (interrupt) will fire and I'll miss some IR code ... so I've moved to 2 Arduinos

Arduino-1 - dedicated reading IR remote
Arduino-2 - reading in data from arduino 1 all while refreshing the LED matrix as fast as possible.

What's the best way for these guys to talk and share data (one way?). I2C seems like it would block or wait for the comm to finish which worries me that it would make the matrix flash or even pause/delay while we read data ... maybe it would be fast enough??

The only way I can think of is to dedicate some pins say 3 and 1 for CTS/RTS and have Arduino-2 slowly ready in the 3bits in a non-blocking fashion.

Is there a better way?

You could use any two digital pins on each Arduino, and NewSoftSerial to create a software serial port.

That the sending of serial data on the sender blocks shouldn't be a problem.

On the receiver, interrupts are used to read the data, but that shouldn't interfere with your update of the matrix. You can then read data from the serial buffer (non-blocking) as you have time.

With this approach, it is easy to implement handshaking, so the sender does not send data (that trigger the interrupt handler) at inappropriate times (if you can define what are inappropriate times).

Hmmm using the Timer1 library and NewSoftSerial seems to botch the communication throwing some extra (random) chars in there ....

Even so, the softserial blocks while it's reading in the IR code (really just a single digit) over the serial and makes the RGB blink/flash ...

I'm wondering if instead of trying serial I could use say 3 digital ports giving me 7 diff codes and I could read that number (over 3 ports) in 1 quick pass without slowing anything else up... maybe 3 digital and 1 more for RTS from the IR side.

I'm surprised that no one else has worked through this ... IR communication (non-blocking) doesn't seem too crazy