«Скиталец»
В этом режиме робот подает одиночный звуковой сигнал, а затем начинает беспорядочно двигаться по полу, натыкаясь на мебель и другие препятствия. При каждом столкновении он включает светодиод с соответствующей стороны, затем немного отъезжает назад, поворачивает в сторону, противоположную точке столкновения, выключает светодиод, и продолжает движение, мигая светодиодами и подавая звуковые сигналы. Такую последовательность действий он может повторять неопределенно долго.
Для реализации этого режима, роботу «Искатель» необходимы два бампера. Никакие другие датчики не нужны, что как нельзя лучше подходит для первой рабочей проверки робота. В идеале не помешали бы еще и два светодиода и устройство звуковой сигнализации, однако они необязательны, и программа прекрасно работает и без них — просто меньше шума и эффектности.
Блок-схема поясняет работу робота «Искатель» в режиме «Скиталец», который режим также требует использования четырех подпрограмм.
Подпрограммы avoidright и avoidleft используются только в режиме 1, хотя вполне применимы и в других режимах. Подпрограммы delay и longdelay используются во всех режимах, поэтому не забудьте ввести их в программу.
Главная подпрограмма — это цикл, который начинается с опроса состояния бамперов. Если один из них вдавлен, то вызывается соответствующая подпрограмма, и робот предпринимает действия по обходу препятствия, описанные ранее. Если бампер не задет, то Робот движется вперед около 2 с, останавливается, подает звуковой сигнал и мигает светодиодами перед возвратом в начало цикла.
Подпрограмма delay вызывается несколько раз в цикле для обеспечения необходимого временного промежутка между повторными включениями и выключениями светодиодов и устройства звуковой сигнализации. Это формирует фиксированную задержку около 0,2 с.
Подпрограмма longdelay — более гибкая. Перед ее вызовом в рабочий регистр загружается шестнадцатеричное значение. Подпрограмма longdelay будет декрементировать это значение до тех пор, пока оно не станет нулевым. При этом на каждом шаге вызывается подпрограмма delay, в силу чего может формироваться задержка любой длительности вплоть до 50 с,
В подпрограмме model входные сигналы от бамперов опрашиваются с достаточно малыми интервалами. В микроконтроллере 16F690 входы порта А могут быть сконфигурированы на инициализацию прерывания по изменению состояния на входе. Таким образом, можно было бы использовать подпрограмму обслуживания прерываний, вызывающую подпрограмму обхода препятствия. Однако это усложняет программу, и поскольку нет никаких проблем с тем, чтобы робот двигался короткими шагами, проще использовать подпрограмму опроса.
Источник: qwedr.com