Also note that if it's mainly push-buttons that are chewing up your I/O pins, there are a few easy ways to mitigate that.

(1) Arrange them (electrically) in a grid, like a keypad. Then you only need enough pins for x-y coordinates. Eg. 8 pins instead of 16 for a 16-button array.

(2) Use resistors, assigning a different resistance value to each of several buttons, and then wire them all to a single analog input on the Arduino. The exact button pressed can be determined from the value returned by the analogRead() function.

The empeg/Kenwood steering wheel remote uses strategy (2).

Cheers