Урок 14.
Программирование на языке PBASIC.
Составные условия
Вы уже писали программы с условиями, но до сих пор проверялось только одно условие и на основании его принималось решение, Существует возможность проверить сразу несколько условий одновременно.
Предположим Мы хотим, чтобы робот двигался и останавливался, если во время движения выполнится составное условие, приведенное ниже:
1. видит объект справа
OR (ИЛИ)
2. видит объект слева
OR (ИЛИ)
3. моторы работают, но колеса не крутятся
OR(ИЛИ) – логический оператор, который может быть помещен в условие IF...THEN, чтобы создать составное условие. Условие, содержащее в себе два оператора OR (ИЛИ) выполняется в том случае, если выполняется хотя бы одно условие. Составное условие записывается следующим образом:
IF (eyeRight = 0) OR (eyeLeft = 0) OR (stuck = 1) THEN
Существуют еще три других логических оператора, которые могут быть помещены в условие IF...THEN, это: AND, NOT, and XOR. Условие, содержащее AND, выполняется только в том случае, если выполняются все условия включенные в составное условие. Условие, содержащее NOT, выполняется в том случае, если само условие ложное. XOR означает, что только одно из двух условий должно быть верным для того, чтобы выполнилось составное условие. Теперь давайте использовать OR (ИЛИ) в программе.
Пример: SeeCircle.bs2
В этой программе, робот будет двигаться по кругу с зажженными зелеными индикаторами. Если робот увидит препятствие, он прекращает движение, гасит индикатор и издает звуковой сигнал, пока Вы не уберете препятствие. Если робот столкнулся с препятствием и его колеса остановились, тогда он выключает моторы на полторы секунды и пытается двигаться дальше.
Ö Установите робота на коробку.
Ö Создайте и загрузите в робота программу SeeCircle.bs2.
Ö Выключите робота и отсоедините кабель.
Ö Поместите робота на пол, на свободное пространство и включите его.
Ö Во время движения робота по кругу создайте ему препятствие так, чтобы робот увидел его и остановился, издав звуковой сигнал.
Ö После того как робот продолжит движение, создайте ситуацию столкновения робота с препятствием.
Ö После возникновения звукового сигнала уберите препятствие – робот должен продолжить движение.


Как работает программа SeeCircle.bs2
В начале идет определение имен пинов : инфракрасного детектора, сенсора столкновения, световых индикаторов, динамика, моторов, инфракрасных излучателей.
ObsRx PIN 6
Stall PIN 7
LedRight PIN 8
LedCenter PIN 9
LedLeft PIN 10
Speaker PIN 11
MotorRight PIN 12
MotorLeft PIN 13
ObsTxRight PIN 14
ObsTxLeft PIN 15
Затем идет инициализация моторов.
LOW MotorRight
LOW MotorLeft
PAUSE 100
Далее описываются три переменные типа Bit. Первые две для хранения состояния инфракрасного детектора после проверки правого и левого инфракрасного излучателя, третья для хранения состояния сенсора столкновения.
eyeRight VAR Bit eyeLeft VAR Bit stuck VAR Bit
Далее идет цикл, первая команда внутри цикла посылает инфракрасный луч из правого излучателя, затем в переменную eyeRight сохраняется состояние детектора (0 – видит препятствие, 1- не видит препятствие). Следующие две команды повторяют тоже самое для левого излучателя.
DO
FREQOUT ObsTxRight, 1, 38500
eyeRight = ObsRx
FREQOUT ObsTxLeft, 1, 38500
eyeLeft = ObsRx
Следующая команда сохраняет состояние сенсора столкновений в переменной stuck.
stuck = Stall
Далее идет проверка: если правый датчик видит преграду или левый датчик видит преграду, или сенсор столкновения определил столкновение, тогда останавливаются моторы.
IF (eyeRight = 0) OR (eyeLeft = 0) OR (stuck = 1) THEN PULSOUT MotorRight, 2000
PULSOUT MotorLeft, 2000
....и гасятся световые индикаторы....
LOW LedRight LOW LedCenter LOW LedLeft
...и звучат звуковые сигналы в течении 1,5 секунды..
FREQOUT Speaker, 750, 1200, 1500
FREQOUT Speaker, 750, 800, 1200
Если не одно из трех условий не выполняется, робот продолжает движение по кругу.
ELSE
PULSOUT MotorRight, 2500
PULSOUT MotorLeft, 3000
...и зажигает световые индикаторы. Затем заканчивается оператор IF-ELSE и заканчивается цикл.
HIGH LedRight HIGH LedCenter HIGH LedLeft
ENDIF LOOP
Выполняя эту программу, Вы должны заметить, что робот после того, как увидел препятствие, останавливается и стоит до тех пор, пока препятствие не уберут, если же происходит столкновение, то он через полторы секунды пытается продолжить движение. Это происходит по тому, что для того чтобы определить столкновение роботу необходимо включить моторы колес.
Автор уроков .
*****@***ru
телефон (48, сотовый 7-46


