Я делаю так: записываю состояние кнопки в кольцевой буфер, в зависимости от пожеланий и аппаратных свойств, глубиной от 2 до 4 с периодичностью от 50 до 500 мс. Отслеживаю событие, например, изменение с 1 на 0 (нажатие), на примере глубины 4: "1100", выполняю нужное действие. Работает, блин годами. Просто как огурец, надежно как колун. Ах да, сам опрос или в луп или, лучше, в прерывание.