предполагает наличие препятствия и переходит в режим избегания. При выключении датчика столкновения (препятствия нет) программа переходит на начало, и процесс поиска и движения к наиболее яркому источнику света продолжается.
Рис. 8.17. Блок-схема программы
Программа написана для компилятора PICBASIC и введена непосредственно в PIC16F84. Без особых изменений программа может быть написана на версии PICBASIC Pro. Программа может быть подстроена под имеющиеся экземпляры CdS датчиков, используемых двигателей и т. п.
Программа 1
‘Микроконтроллер 1
start:
High 4: low 4 ‘Мигание светодиода
b7 = 0
button 5,0,255,0,b7,1,avoid ‘Проверка препятствия
pot 7, 255, b0 ‘Считывание датчика CdS 1
pot 6, 255, b1 ‘Считывание датчика CdS 2
if b0 <= 250 then skip ‘Достаточно темно?
If b1 >= 250 then slp ‘Да
skip: ‘Нет
if bo > 25 then skip 2 ‘Слишком много света
if b1 < 25 then avoid ‘Да
skip2: ‘Нет
if bo = b1 then straight ‘Освещенность одинакова, вперед
if bo > b1 then greater ‘Проверить освещенность
if bo < b1 then lesser ‘Проверить освещенность
straight:
high 0: high 1: low 2 ‘Сообщение микроконтроллеру 2
goto start ‘Движение прямо
greater:
b2 = b0 – b1 ‘Проверка разности освещенности
if b2 > 10 then rt ‘Если больше 10, поворот направо
goto straight ‘Если нет, движение прямо
lesser:
b2 = b1 – b0 ‘Проверка разности освещенности
if b2 > 10 then lt ‘Если больше 10, поворот налево
goto straight ‘Если нет, движение прямо
rt: ‘Поворот направо, посылка
high 0: low 1: low 2 ‘Сообщение микроконтроллеру 2
goto start
lt: ‘Поворот налево, посылка
low 0: high 1: low 2 ‘Сообщение микроконтроллеру 2
goto start
slp: ‘Режим спячки, посылка
low 0: low 1: low 2 ‘Сообщение микроконтроллеру 2
goto start
avoid: ‘Режим избегания, посылка
low 0: low 1: high 2 ‘Сообщение микроконтроллеру 2
goto start
Программа 2
‘Микроконтроллер 2
b4 = 150 ‘Установка среднего положения сервомотора
start:
peek 6, b1 ‘Чтение данных микроконтроллера 1
let b0 = b1 & 7 ‘Маскирование кроме первых трех битов
if b0 = 0 then slp ‘Время спячки
if b0 = 1 then rt ‘Поворот направо
if b0 = 2 then lt ‘Поворот налево
if b0 = 3 then fw ‘Движение прямо
if b0 = 4 then avoid ‘Режим избегания
goto start
slp:
low 4: low 5 ‘Выключить двигатель
pulsout 3, b4 ‘Запустить сервомотор
pause 18 ‘Задержка включения сервомотора
goto start ‘Чтение данных микроконтроллера 1
rt: ‘Поворот направо
high 4: low 5 ‘Движение вперед
if b4 > 200 then rt1: ‘Поворот направо максимален
b4 = b4 + 1 ‘Нет
rt1: ‘Да
pulsout 3, b4 ‘Поворот сервомотора
pause 18 ‘Задержка ( 55 Гц)
goto start ‘Чтение данных микроконтроллера 1
lt: ‘Поворот налево
high 4: low 5 ‘Движение вперед
if b4 < 100 then lt1: ‘Поворот налево максимален
b4 = b4 – 1 ‘Нет
lt1: ‘Да
pulsout 3, b4 ‘Поворот сервомотора
pause 18 ‘Задержка (55 Гц)
goto start ‘Чтение данных микроконтроллера 1
fw: ‘Прямо
high 4: low 5 ‘Движение прямо
pulsout 3, b4 ‘Поворот сервомотора
pause 18 ‘Задержка (55 Гц)
goto start ‘Чтение данных микроконтроллера 1
avoid:
low 4: high 5 ‘Движение назад
if b4 > 150 then vr ‘Проверка. Перемена направления направо?
if b4 <= 150 then vl ‘Проверка. Перемена направления налево?
vr: ‘Перемена направления вправо
b5 = b4 – 30 ‘Направление поворота
for b6 = 1 to 120 ‘Цикл задержки 2 с
pulsout 3, b5 ‘Поворот сервомотора
pause 18 ‘Задержка (55 Гц)
next b6 ‘Конец цикла
goto start ‘Чтение данных микроконтроллера 1
vl: ‘Перемена направления влево
b5 = b4 + 30 ‘Направление поворота
for b6 = 1 to 120 ‘Цикл задержки 2 с