• Программа говорит микроконтроллеру проверить кнопку.
• Микроконтроллер обнаруживает, что кнопка нажата.
• Дисплей замирает. Микроконтроллер ждет, когда кнопка будет нажата снова.
• Но он обнаруживает, что кнопка по- прежнему нажата, потому что игрок еще не успел отпустить ее.
• Микроконтроллер действует так: «Кнопка нажата, поэтому я должен возобновить быстрое отображение цифр».
В результате индикация на дисплее остановится лишь на мгновение.
Вот решение проблемы — дополнительный шаг в последовательности:
• Шаг 5А. Дождаться момента, когда игрок отпустит кнопку.
Это не даст компьютеру возможности вести дальнейший отсчет и отображать другие числа, пока игрок не будет готов.
Теперь все в порядке?
Нет, боюсь, что нет. Возможно, вам кажется, что процесс становится слишком трудоемким, но в таком случае я вынужден сказать: «извините, но таково программирование». Если кто-то говорит, что можно быстро набросать несколько команд и посмотреть, как они работают, то уверяю вас, что чаще всего это не так.
Существует еще одна проблема с кнопкой. Шаг 6 просит подождать, пока кнопка не будет нажата снова, чтобы запустить быстрое отображение. Отлично. Игрок нажимает кнопку, дисплей возобновляет индикацию цифр, но микроконтроллер настолько быстр, что он «промчится» через процесс обнуления текущего значения и отображения новой комбинации игральных костей прежде, чем игрок перестанет нажимать кнопку. В результате, когда микроконтроллер перейдет к Шагу 4, он обнаружит, что кнопка по-прежнему нажата, и снова «заморозит» дисплей.
Как быть? Возможно, мне следует добавить новый Шаг 7, который говорит микроконтроллеру подождать, пока кнопка будет отпущена, прежде чем продолжить быстрое отображение.
Это противоречит интуиции. Я не думаю, что все осознают необходимость нажать кнопку и отпустить ее, чтобы возобновилось быстрое отображение. Проще всего сказать: «Ну, вы должны делать так, потому что этого требует программа». Но это неправильный ход рассуждений.
Внимание!
Программа должна делать то, что ожидает пользователь. Мы никогда не должны принуждать пользователя выполнять что-либо в угоду программе.
В любом случае, идея подождать, пока кнопка не будет отпущена, прежде чем продолжится быстрое отображение, не будет работать. Не забывайте, что есть еще одна проблема: дребезг контактов. Он возникает, когда кнопку нажимают и когда отпускают. Вследствие этого, если кто-то отпустит кнопку и процесс продолжится, программа спустя миллисекунду снова проверит кнопку, контакты которой могут все еще создавать вибрацию, и они могут оказаться как в разомкнутом, так и в замкнутом состоянии.