Las interrupciones y las pulsaciones de los botones no se mezclan en absoluto. Los botones tienen un fenómeno que sabe un rebote. Justo antes de que los contactos se cierran, "rebotan" haciendo y rompiendo el contacto. Si, por ejemplo, utiliza un interruptor de cambio de pin con un botón, puede entrar y salir del modo de suspensión un montón de veces antes de que el botón se estabilice. Los botones deben ser objeto de rebote, una técnica que garantiza que el estado del botón sea estable antes de leerlo.
La mejor manera de deshacer un botón es leer el estado del botón en intervalos regulares, por ejemplo, 1 ms. Si el estado del botón permanece constante durante al menos 50 ms, el botón puede considerarse estable.
La forma en que normalmente escribo tal rutina es verificando el botón cada 1 ms. Si un evento de rebote no está en progreso y el estado actual del botón no coincide con el estado anterior del botón, inicie un evento de rebote. Continúe marcando el botón cada 1 ms, pero aumente el contador cada vez que se produzca la lectura de un botón. Normalmente comenzaré a los 50. Si el botón está en niveles bajos, disminuiré y si el botón está alto, aumentaré. Si llegas a 100, entonces el botón es alto y si llegas a 0, el botón es bajo. Restablece la variable de inicio a 50 y establece el evento de rebote en falso.
En su caso, usaría la interrupción de cambio de pin para activar el micro, pero luego impongo un rebote obligatorio. Si pasa el rebote, quédate despierto. Si se produce un error en el proceso, significa que no se presionó un botón y luego se vuelve a dormir.