Menu switch case

El problema que le veo es que no estas detectando el evento push, o click.
Si presionas el pulsador y lo mantienes por mas de los 100 milis. que tiene tu delay a la misma pulsación la contara dos veces, y si sigues manteniendo mas aún.

La forma que encontré de hacer algo asi es controlando en cada loop del programa el valor actual de la entrada con el valor que tenia en el loop anterior, y asi contar una vez sola cada pulsación.

Mira este post en el que comente al respecto y sobre como encapsular esta logica para reusarla facilmente en otros proyectos.
http://arduino.cc/forum/index.php/topic,79318.0.html

Saludos.