Reading a button matrix?

Hello

I want to read a 4 x 4 button matrix and I have one of the Sparkfun breakout boards which provide connections for SWITCH1-4 and SW GND1-4. Before I really gave it any thought I assumed 4x4=16 buttons and started playing around with a pair of CD4021 shift registers ... and then it dawned on me that a 4x4 button matrix isn't just 16 buttons!

So my first question is, is my assumption correct?

So after a little research I discovered the CD4051 tutorials. The example refers to an 8x8 pad requiring 9 CD4051s if you want to register more than two simultaneous button presses! Then obviously I looked into all the Monome/Arduinome stuff which uses a 74HC165 (iirc). I looked at the firmware too which seemed very complicated for reading some buttons!

So my second question is, what is the best way for me to read a 4x4 button matrix? Is the Monome route more complex than it needed?

I guess in essence a 4x4 button pad is just 16 buttons but wired in a unique way. I've looked at the PCB and without cutting tracks I don't see how each could be isolated. The advantage of the Sparkfun boards is that they have the little round contact area and fit those nice rubber button sheets.

What's the advantage of button matrices then from an engineering perspective? Simply that they require fewer inputs to a micocontroller?

Thanks
Jim

A 4X4 matrix of switches is not just 16 buttons, it is a matrix with columns and rows.

http://dev.squarecows.com/2008/08/20/how-to-read-a-keypad-with-arduino/

http://www.arduino.cc/playground/Code/Keypad

Simply that they require fewer inputs to a micocontroller?

Yes this advantage grows as the size of the matrix grows.

Has the switch matrix got diodes built in? If so you can read multiple buttons being pressed, if not you can only detect one.