Урок 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