Сделай Сам Свою Работу на 5

Правила написания программ для Arduino.





Пишем программу для робота мини-сумо.

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

Основа программы - алгоритм.

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

Не буду использовать научные термины, скажу просто, Алгоритм – это описание последовательности неких действий. Вся наша жизнь – это различные действия; мы ходим, говорим, двигаем руками и ногами, вертим головой. У всего этого есть свой смысл - алгоритм, последовательность, которая определяет наше поведение, и его можно составить и описать. Для наглядности приведу пример из жизни. Вы каждое утро чистите зубы. Попробуйте описать, как вы это делаете, как бы составьте программу для себя. Вот что получится:



«Берем зубную щетку. Выдавливаем пасту. Чистим зубы движениями влево-вправо. Полощем рот. Моем щетку».

В принципе все верно, но эту маленькую программу мы можем выполнить в обед, вечером или после каждого приема пищи. Но мы не учли важные факторы, которые могут свести на НЕТ все наши старания. Изначально мы говорили про утро. Это важный фактор и если его не учесть, то чистить зубы придется лежа в постели и с закрытыми глазами. Поэтому всегда у любой программы должно быть какое-то начало и конец с возможностью повторения цикла. Повторяющимся циклом для человека является следующий день, где снова будет утро, и снова нужно будет чистить зубы. Поэтому добавим к нашей программе следующий алгоритм (последовательность действий).

«Проснуться. Встать с постели...» Если на этом этапе остановить создания алгоритма и перейти сразу к чистке зубов то программа застопорится (зависнет). Почему? Потому что мы снова не учли всех факторов. Вы стоите посреди своей спальни и не можете выполнить следующую команду; «Берем зубную щетку», так как щетка находится в ванной, а в нее нужно еще дойти. Ну, если вы спите в ванной, то нет проблем – программа выполнится! Но в большинстве случаев нормальные люди спят в другой комнате. Такой подход называется логическим, то есть осмысленным. Все наши действия должны быть разумными и содержать определенный смысл, иначе поставленная цель не будет достигнута. Поэтому «Проснуться. Встать с постели. Пойти в ванную комнату», будет наилучшим вариантом.



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

Рис. 1 Алгоритм поведения робота на ринге.

 

На рисунке 1 вы видите блок-схему. По всем правилам, именно так принято составлять алгоритмы. Наглядно и понятно.

Первый блок – «Начало». С этого момента программа начинает выполнение действий робота после включения. Первое что он должен будет сделать – это найти противника, блок «Поиск цели». Следующий блок нашей схемы в виде ромбика «Цель найдена?». Это означает, что перед нами будет стоять выбор действий по достижению определенного события. Если цель найдена (Да), то мы продолжим выполнение программы и перейдем к следующей части программы «Атаковать», но если цель не найдена (Нет), то логичнее всего продолжить ее поиск. Программа зациклится на этом моменте, пока робот не обнаружит противника. При атаке робот движется вперед на противника, пытаясь вытолкнуть его за пределы ринга, в этот момент работает блок «Достигнут край ринга?», если край ринга не достигнут, то атака продолжается, но если датчики обнаружили белую полосу края, то атака прекращается и программа переходит к следующему блоку «Отъезжаем назад» и «Разворот». После разворота, цикл основной программы повторяется, то есть она начинается с самого начала и робот снова ищет противника. Так сделано неспроста. Если в момент атаки, противнику удалось улизнуть от нашего робота, то мы должны вернуться к его поиску не выехав за край ринга. С теорией все. Перейдем к практике.




 

Правила написания программ для Arduino.

Хоть я и говорил что с теоретической частью покончено, но нам следует изучить принцип построения программы для микроконтроллеров Arduino, хотя эти принципы будут верными и для других МК семейства AVR.

 


Рис. 2 Метод написания программы для Arduino.

Данная блок-схема нам наглядно показывает, какие важные моменты, и в каком порядке следует соблюдать при написании программы.

В самом начале программы при необходимости подключаются дополнительные модули. Затем объявляются глобальные переменные. Далее идет блок инициализации контроллера. В нем определяются назначения портов, вход это или выход и другие настройки. Так же из этого блока могут быть вызваны дополнительные вспомогательные подпрограммы. Если быть кратким, то в этом месте программа производит предварительные настройки контроллера. Этот блок выполняется один раз при старте или перезагрузке контроллера. Обратите внимание, в блоке добавлена строчка «задержка 5 сек». К общим правилам написания программы это не относится, но для робота мини-сумо необходимо. В правилах сказано, что после команды судьи роботы должны начать движение по истечении 5 секунд. Данную задержку нельзя выполнять в основном цикле программы, так как она будет постоянно повторяться, и поведение робота изменится не в лучшую сторону.

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

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.