Читаем Электроника для начинающих (2-е издание) полностью

Поскольку выбор случайного числа – это основа данной программы, то вас следует познакомить с данной темой. Давайте заглянем на сайт Arduino, где находится справка о языке. Этот раздел сайта не настолько исчерпывающий, как мне хотелось бы, но для начала сгодится.

Чтобы найти его, перейдите на главную страницу Arduino[18], выберите вкладку Learning (Обучение) и отыщите раздел Reference, где вы найдете секцию Random Numbers. Там вы обнаружите специально созданную для контроллера Arduino функцию под названием random().

Вас не должно это удивлять, потому что практически все языки программирования высокого уровня имеют какую-либо встроенную функцию генерации случайных чисел, и она всегда основана на математических приемах для формирования последовательности чисел, которая продолжается очень долго, прежде чем начнет повторяться. Единственная проблема заключается в том, что поскольку эти числа создаются путем математических операций, то случайная последовательность будет начинаться с одного и того же места каждый раз, когда вы запускаете программу.

А если вы желаете, чтобы последовательность начиналась с другого числа? Для этого есть другая функция ПОД названием randomSeed(), которая запускает генератор чисел в зависимости от состояния вывода микроконтроллера, который ни к чему не подключен. Как я уже упоминал ранее, «плавающий» логический вывод улавливает окружающее электромагнитное излучение, и вы никогда не узнаете, что от него ожидать. Поэтому значение randomSeed() может оказаться в полном смысле слова случайным, и его использование даст хороший результат, но следует помнить, что «плавающий» контакт нельзя задействовать для чего-либо еще.

Отложим ненадолго вопрос о начальном значении для генератора случайных чисел. Давайте предположим, что случайное значение генерирует функция random() и затем из него формируется число в качестве выходного значения программы имитации игральных костей. Как это реализовать?

Я думаю, игрок будет нажимать кнопку, и в этот момент отобразится случайно выбранная конфигурация точек на кубике. Готово! Затем, если вам нужно «кинуть кости» повторно, вы просто нажимаете кнопку еще раз, и появляется другая, выбранная случайным образом, комбинация точек на кубике.

Это нам подходит, но выглядит не очень правдоподобно. Люди могут задаться вопросом, на самом ли деле это случайное число? Полагаю, проблема в том, что пользователь лишен возможности управлять процессом.

Вернемся к «аппаратной» версии этого устройства. Мне нравился вариант, когда после включения точки отображаются очень быстро и конфигурации нечеткие, а игрок может нажать кнопку, чтобы произвольно прервать последовательность.

Может быть, программа должна работать именно так, а не использовать функцию random()?

Она может вести отсчет от 1 до 6 снова и снова очень быстро – как микросхема счетчика в аппаратной версии игральных костей.

Но теперь возникают другие сложности. Когда программа считает от 1 до 6, а затем повторяет счет, микроконтроллеру, как я думаю, понадобится еще несколько микросекунд, чтобы вернуться к началу цикла. Поэтому число «6» всегда будет отображаться чуть дольше, чем другие числа.

Возможно, мне удастся скомбинировать две концепции. Я могу применить генератор случайных чисел для создания последовательности чисел, а затем буду показывать их очень быстро, пока игрок не нажмет кнопку в произвольный момент.

Мне нравится этот план. Но что потом? Не придется ли добавить еще одну кнопку, чтобы перезапустить быстрое отображение чисел? Хотя, нет, это излишне: одна и та же кнопка выполнит обе операции. Нажмите, чтобы остановить, снова нажмите, чтобы перезапустить.

Видите, я все более четко представляю, какие действия должна выполнять наша программа. Теперь можно сделать следующий шаг при определении инструкций для микроконтроллера.

<p>Алгоритм</p>

Мне нравится составлять алгоритм в виде последовательности предложений, которые очень легко перевести на язык компьютера. Вот мой план алгоритма для программы, которую я назвал «Точные игральные кости». Имейте в виду то, что эти инструкции будут выполняться очень быстро, и в результате числа окажутся размытыми.

Основной цикл:

• Шаг 1. Выбрать случайное число.

• Шаг 2. Преобразовать его в конфигурацию точек на игральной кости и зажечь соответствующие светодиоды.

• Шаг 3. Проверить, нажата ли кнопка.

• Шаг 4. Если кнопка не нажата, вернуться к Шагу 1 и выбрать другое случайное число, чтобы быстро продолжить последовательность. Иначе…

• Шаг 5. Остановить индикацию на дисплее.

• Шаг 6. Подождать, пока игрок не нажмет кнопку повторно. После этого вернуться к Шагу 1 и повторить.

Есть ли в этой последовательности шагов какие-нибудь проблемы? Попробуйте представить ее с точки зрения микроконтроллера. Если бы вы получили инструкции из такой программы, у вас было бы все необходимое, чтобы выполнить это задание?

Перейти на страницу:

Похожие книги

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника
Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки
Искусство схемотехники. Том 3 (Изд.4-е)
Искусство схемотехники. Том 3 (Изд.4-е)

Широко известная читателю по предыдущим изданиям монография известных американских специалистов посвящена быстро развивающимся областям электроники. В ней приведены наиболее интересные технические решения, а также анализируются ошибки разработчиков аппаратуры: внимание читателя сосредотачивается на тонких аспектах проектирования и применения электронных схем. На русском языке издается в трех томах. Том 3 содержит сведения о микропроцессорах, радиотехнических схемах, методах измерения и обработки сигналов, принципах конструирования аппаратуры и проектирования маломощных устройств, а также обширные приложения. Для специалистов в области электроники, автоматики, вычислительной техники, а также студентов соответствующих специальностей вузов и техникумов.

Пауль Хоровиц , Уинфилд Хилл

Техника / Радиоэлектроника