Программирование датчика цвета — КиберПедия 

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Программирование датчика цвета

2020-05-07 1402
Программирование датчика цвета 0.00 из 5.00 0 оценок
Заказать работу

Кроме датчика касания и ультразвука можно подключить датчик цвета, который работает в трех режимах:

1. определения цвета;

2. яркость отраженного света;

3. яркость внешнего освещения.

В режиме «Цвет» датчик цвета может определить цвет находящегося рядом объекта или цвет поверхности, находящейся рядом с датчиком. При этом для обеспечения более точного определения цвета, объект или поверхность должны находиться очень близко к датчику, но не касаться его (0,1 – 1 см). Датчик может определять семь разных цветов: черный, синий, зеленый, желтый, красный, белый и коричневый, каждый из которых имеет свой код. В TRIK Studio код цвета можно увидеть на панели «Переменные» в режиме отладка 2D модели в строках sensor1, sensor2, sensor3 или sensor4, в зависимости от используемого порта.

Объект другого цвета может определяться как «Без цвета» или его цвет может определяться по ближайшему к нему цвету. Например, оранжевый цвет может определяться как красный или желтый в зависимости от содержания красного цвета в оранжевом, или как коричневый или черный, если оранжевый цвет очень темный или находится слишком далеко от датчика. При работе в данном режиме на передней панели датчика загораются красный, зеленый и синий светодиоды.

Важно!

Если поверхность материала блестящая, то определение цвета может быть некорректным из-за бликов от подсветки датчика или яркого солнца. Поэтому, если нет возможности изменить материал, необходимо максимально снижать скорость робота при проезде цветного определяемого участка или закрывать поле от попадания прямых солнечных лучей. Ошибка при определении цвета может возникать и на матовых поверхностях при освещении помещения люминесцентными лампами. Белая поверхность может определяться красной, зеленой, синей, причем в одной и той же точке. Это связано с тем, что принцип работы ламп предполагает мерцание светового потока практически во всей области видимого спектра. Человек мерцание может не замечать, но датчик, работая с частотой 1 кГц, вместо правильного цвета может фиксировать отраженные цветовые лучи. Единственный способ выхода из данной ситуации – конструировать робота так, чтобы датчик цвета был закрыт сверху и с боков от прямого попадания света люминесцентных лампам. Например, можно надеть шину (рисунок 10.1).


Рис.10.1: Внешний вид шины, надетой на датчик, в двух проекциях.

В режиме «Яркость отраженного света» датчик цвета определяет яркость света, попадающего в датчик и измеряется в процентах от 0 до 100. Если от поверхности ничего не отражается, то значение датчика будет равно 0. Если 100% света, созданного датчиком, отражается, то датчик передаст значение 100.


Рис.10.2: Отражение светового потока при разном расположении датчика над поверхностью черной линии.

Так как датчик цвета в указанном режиме фиксирует процент отраженного света, то получаемые значения удобно сравнивать со шкалой градаций серого цвета, то есть можно сказать, что датчик различает 100 градаций серого цвета. Число на выходе будет зависеть не только от оттенка цвета, но и от внешнего освещения и поверхности.

Когда датчик цвета находится в режиме «Яркость отраженного света», на передней панели датчика загорается красный светодиод.  

В режиме «Яркость внешнего освещения» датчик цвета определяет яркость света, попадающего в датчик и измеряется в процентах от 0 до 100, где 0 – очень темный, а 100 – очень яркий. Когда датчик цвета находится в данном режиме, на передней панели датчика загорается тусклый синий светодиод. Его можно использовать для определения яркости освещения комнаты или яркости других источников света, свет от которых попадает в датчик.

В среде TRIK Studio можно увидеть графическое представление датчиков при запуске программы в режиме интерпретации на роботе или в двумерной модели. Для просмотра необходимо открыть режим «Отладка», закладка «Графики» (рисунок 10.3).


Рис.10.3: Графическое представление сенсора света при движении по линии.

Из выпадающего списка снизу можно выбрать сенсор, значения с которого будут отображаться. Кнопками "Старт" и "Стоп" можно запустить или остановить снятие показаний, не прерывая работы программы. Можно регулировать масштаб графика вручную, кроме того, график автоматически масштабируется, чтобы кривая показаний помещалась по высоте целиком. При наведении курсора мыши на точку на графике отобразится значение в этой точке. Ниже кнопки "Очистить график" находится кнопка "Выгрузить показания в файл", которая позволяет экспортировать в формат.csv все показания выбранного датчика с начала их записи. Просмотреть показания затем можно, например, в программе MS Excel.

    В TRIK Studio для работы с датчиком цвета используются блоки «Ждать цвет», «Ждать интенсивность цвета», «Ждать свет».

    Задача 10.1. Робот едет прямо до тех пор, пока датчиком цвета не обнаружит линию зеленого цвета. При обнаружении цвета робот должен остановится и проиграть звук.

    Для решения задачи понадобятся блоки «Моторы вперед», «Ждать цвет», «Гудок» или «Играть звук». В редакторе свойств блока «Ждать цвет» необходимо определить порт, к которому подключен датчик цвета и указать цвет.


Рис.10.4: Программа к задаче 10.1.

    В режиме отладки 2D модели перед запуском программы необходимо нарисовать линию, используя инструмент «Линия», выбрать соответствующий цвет, в разделе «Порты» выбрать «Сенсор цвета (распознавание цветов)» у порта №1. Робот будет двигаться прямо, пока не обнаружит линию зеленого цвета, затем остановиться и произведет гудок.

    Задача 10.2. Робот едет прямо до тех пор, пока датчиком цвета не обнаружит линию черного цвета. При обнаружении цвета робот должен остановится и проиграть звук.

    Решим задачу с использованием блока «Ждать свет», то есть используя режим «Яркость отраженного света».

    Заменим в предыдущей задача блок «Ждать цвет» на «Ждать свет». Блок имеет следующие свойства: «Порт», «Проценты» и «Считанное значение». В нашем случае датчик цвета подключен к порту 1. В окне «Проценты» установим значение, равное 50, так как темные поверхности имеют яркость отраженного света как правило меньше указанного значения. И в свойстве «Считанное значение» необходимо указать «меньше». Получим программу на рисунке 10.5. При запуске программы в разделе «Порты» нужно поменять «Сенсор цвета (распознавание цветов)» на значение «Сенсор света».


Рис.10.5: Программа к задаче 10.2.

Задача 10.3. Подключить к роботу два датчика цвета (рисунок 10.6) и вывести на экран их показания в режиме яркости отраженного света (один датчик расположен на белой поверхностью поля, второй – над черной линией).


Рис.10.6: Положение датчиков и робота.

При решении задачи воспользуемся блоками «Параллельные задачи» (подробнее см. раздел 13) и «Переменная» (подробнее см. раздел 14). В блоках «Переменная» будут записаны показания датчиков 1 и 2 и в дальнейшем выведены на экран, причем запись и вывод будет выполняться параллельно, с использованием блока «Параллельные задачи» (рисунок 10.7). Для вывода на экран числовых значений s 1 и s 2, а не текста, не забываем в редакторе свойств блока «Напечатать текст» ставить флажок «Вычислять».


Рис.10.7: Программа к задаче 10.3.

В режиме отладки 2D модели экран будет выглядеть как на рисунке 10.8. Левый датчик находился над белой поверхностью и его показания близки к 100%, а правый датчик – над черной линией и имеет показания, равные 10%. При запуске программы на реальном роботе показания могут отличаться, так как они будут зависеть от внешних факторов, о которых было сказано выше.


Рис.10.8: Вид контроллера во время запуска программы.


Задания для самостоятельного решения

1. Используя панель «Переменные» в режиме отладки 2D модели, определить коды следующих цветов: черный, синий, зеленый, желтый, красный, белый.

2. Составить программу объезда роботом синей лужи.

3. Нарисовано несколько цветных линий. Пересекая желтую линию, робот отпускает маркер красного цвета.

4. Составить программу вывода на экран названия цвета той линии, которую робот проезжает.

5. Задача «Кегельринг»: вытолкнуть все банки за пределы окружности диаметром 1 метр, при этом робот не должен покидать поле.


 

Организация ветвления

Все рассмотренные выше задачи относятся к типу алгоритма «Следование», когда команды выполняются в строгой последовательности друг за другом. Однако часто при решении задач требуется проверять некоторое условие, от которого будет зависеть дальнейшее поведение робота. В этом случае необходимо организовать алгоритм типа «Ветвление».

Ветвление (развилка) - такая форма организации действий, при которой в зависимости от выполнения или невыполнения конкретного условия, совершается либо одна, либо другая последовательность действий.

Условие – логическое выражение, принимающее истинное или ложное значение.

Существует полная форма ветвления (рисунок 11.1), в которой при выполнении условия будет выполняться команда, находящаяся в ветви «да», а если условие не выполняется, то выполняться команда, находящаяся в ветви «нет». Такой тип ветвления называют «Если-то-иначе».

условие
Действие 1
Действие 2
да
нет
да
нет

Рис. 11.1: Полная форма ветвления.

В неполной форме ветвления («Если-то») при выполнении условия будет выполняться команда, находящаяся в ветви «да», а если условие не выполняется, то выполнение передается команде, находящейся после ветвления (рисунок 11.2).

условие
Действие 1
Действие 2
да
нет
да
нет

Рис. 11.2: Неполная форма ветвления.

В ветвлениях «Если-то» и «Если-то-иначе» предлагается выбор из двух вариантов (да/нет), но есть задачи, где нужно выбрать один из трех, четырех и более вариантов. В данном случае следует использовать ветвление типа «Выбор» или «Выбор-иначе».

В TRIK Studio можно организовать все перечисленные типы ветвления:

1) если-то;

2) если-то-иначе;

3) выбор;

4) выбор-иначе.

Задача 11.1.  Робот должен доехать до стены и остановиться на расстоянии 10 см от нее. Если справа от робота стена на расстоянии менее чем 15 см, то он должен повернуть налево. Решим задачу с помощью ветвления «Если-то».

Предварительно создадим обстановку, как на рисунке 11.3. Подключим к портам 1 и 2 сенсоры расстояния, повернув сенсор 1 на 90о вправо.


Рис. 11.3: Начальное положение робота на виртуальной сцене.

В программе можно использовать ранее созданную подпрограмму «Left­_90» (рисунок 11.4).


Рис. 11.4: Подпрограмма «Left­_90».

Для организации ветвления вынесем на диаграмму блок «Условие».

При написании условий используются следующие операции: 

· <, <=, >, >= – операции сравнения, применимы к целым и вещественным значениям, результат логический;

· == – операция проверки равенства, применима к значениям любых типов, результат логический;

· ~=,!= – операция проверки неравенства, применима к значениям любых типов, результат логический;

·  and или && – логическое "и", применим к целым, вещественным и логическим значениям, результат логический;

· or или || – логическое "или", применим к целым, вещественным и логическим значениям, результат логический.

Используя редактор свойств, введем условие sensor1<15. В данном случае мы используем зарезервированную переменную sensor1. Так как к роботу можно подключить 4 сенсора, то также можно использовать переменные sensor2, sensor3 sensor4. Названия переменных можно копировать с панели с одноименным названием.  

Из блока «Условие» обязательно должны выходить две связи – «истина» и «ложь». Причем пометить достаточно одну связь. Для внесения метки на связи, достаточно щелкнуть правой кнопкой мыши по ней и в редакторе свойств выбрать «истина» или «ложь». Итак, на ветви «истина» размещаем подпрограмму поворот, а по ветви «ложь» завершаем программу. Общий вид программы показан на рисунке 11.5.


Рис. 11.5: Программа к задаче 11.1.

    Задача 11.2. Вывести на экран робота квадрат, если случайное число больше 5, в противном случае окружность. Решим задачу с помощью ветвления «Если-то-иначе».

    Вынесем на сцену блок «Случайное число». В его свойствах необходимо указать название переменной и указать диапазон чисел. Выберем диапазон от 1 до 10. В блоке «Условие» укажем x >5. В ветви «истина» расположим блок «Нарисовать прямоугольник», а ветви «ложь» – блок «Нарисовать круг». Предварительно необходимо выполнить очистку экрана с помощью соответствующего блока. Получим программу (рисунок 11.6).


Рис. 11.6: Программа к задаче 11.2.

Работает программа следующим образом: случайным образом выбирается число из указанного в блоке диапазона. Например, было выбрано число 4. Проверяется условие: 4>5? Условие принимает ложное значение, поэтому на экране робота будет выведен круг.

Разберем задачу, когда необходимо сделать выбор из нескольких вариантов.

Задача 11.3. Робот при движении вперед должен рисовать цветную линию. Выбор цвета зависит от числа, полученного случайным образом.

При решении задачи понадобиться блок «Выбор» (Switch). Значение выражения, указанного в свойстве «Выражение», сравнивается со значениями на исходящих связях. Если среди них найдено равное, то исполнение будет продолжено по этой ветке. В противном случае будет выбрана ветка без маркера (эта ветка всегда должна присутствовать в блоке). На рисунке 11.7 ветка без маркера идет на блок «Конец».

Таким образом, в задаче 11.3 (рисунок 11.7) сначала случайным образом определяется число х, например, х=2, затем выполнение программы идет по ветви с маркером 2 и будет нарисована линия желтого цвета при проезде робота вперед в течении 1-й секунды.


Рис. 11.7: Программа к задаче 11.3.

 

Задания для самостоятельного решения

1. Написать программу, имитирующую светофор:

· если горит красный индикатор, робот должен стоять в течении 2 сек,

· если горит оранжевый индикатор, робот стоит в течении 2 сек,

· если горит зеленый индикатор, робот движется в течении 2 сек.

2. На дороге до места назначения 4 светофора. Надо проехать, соблюдая правила дорожного движения.

3. На поле нарисованы разноцветные линии. Составить программу вывода на экран названия цвета той линии, которую робот проезжает, используя блок «Выбор».

4. На поле «Кегельринг» располагаются банки двух цветов (белые и черные), место их расположения заранее неизвестно. Необходимо вытолкнуть банки только черного цвета.

 

 

Организация циклов

Роботы часто выполняют одну и туже задачу многократно. В данном случае можно говорить об организации циклического алгоритма (цикла).

Циклический алгоритм – алгоритм, в котором группа команд выполняется несколько раз в зависимости от выполнения или невыполнения условия цикла. Группа повторяющихся команд называется телом цикла.

Различают два типа циклов: с известным числом повторений и с неизвестным числом повторений. Существует 3 типа циклических структур:

· цикл с предусловием;

· цикл с постусловием;

· цикл с параметром;

Иначе данные структуры называют циклами типа «Пока», «До», «Для» соответственно.

На рисунке 12.1 представлены блок-схемы циклов с предусловием и с постусловием.

да
условие
Серия команд
нет
          
да
Серия команд
нет
условие

Рис. 12.1: Циклы с предусловием и с постусловием.

    В цикле с предусловием серия команд выполняется до тех пор, пока выполняется условие. Цикл может не выполнится ни разу, если значение условия сразу же оказывается ложным.

В цикле с постусловием сначала выполняется серия команд, а затем проверяется условие: если оно ложно, то цикл продолжается, если истинно – завершается.

На рисунке 12.2 представлена блок-схема цикла с параметром.

счетчик
Серия команд

Рис. 12.2: Циклы с параметром.

В данном цикле серия команд выполняется определенное количество раз и до тех пор, пока счетчик принимает значения от начального до конечного, например, от 1 до 10.

В TRIK Studio кроме цикла с итерациями (цикл с параметром), цикла с условием (с постусловием, с предусловием) можно организовать и бесконечный (безусловный) цикл.

Рассмотрим пример с использование бесконечного цикла.

Задача 12.1. Нарисоватьтрехцветную линию, красно-желто-зеленую, бесконечно чередующуюся.

В разделе 11 подобная задача была рассмотрена для случайного числа. В данном примере воспользуемся блоком «Функция» (подробнее о блоке см. в разделе 14), в которую запишем значение величины х, равной 1. Блок «Выбор» будет содержать три ветви, так как необходимо нарисовать трехцветную линию. В каждой ветви будем задавать новое значение для х (2, 3 или 1). Для бесконечного выполнения из блока «Таймер» нужно протянуть ветвь к блоку «Выбор», как показано на рисунке 12.3.

Программа будет выполняться, пока пользователь не нажмет кнопку «Стоп».


Рис. 12.3: Программа к задаче 12.1 использованием бесконечного цикла.

Чтобы программа выполнялась определенное количество раз, необходимо организовать цикл с параметром. Для этого в задаче необходимо использовать блок «Цикл». Данный блок имеет две исходящие линии: одна направлена на начало цикла (в свойствах линии указать «Тело цикла»), другая отправляет на команды, расположенные после цикла. В свойствах блока также нужно указать количество повторений (итераций).

Внесем изменения в предыдущей программе, указав 5 повторений (рисунок 12.4).


Рис. 12.4: Программа к задаче 12.1 с использованием цикла с параметром.

Задача 12.2. Составить программудвижения робота до стены, не касаясь которой, отъехать назад на заданное расстояние.

Решим эту задачу с использованием цикла с условием. Добавим блок «Условие» и внесем условие завершения цикла sensor1<15 (ультразвуковой датчик подключен к порту 1). Ветвь со значением «ложь» направлена на блок «Моторы вперед» (тело цикла), а ветвь «истина» – на выход из цикла. Таким образом, робот будет двигаться до стены тех пор, пока указанное условие принимает ложное значение. Как только условие примет истинной значение, робот начинает движение назад (рисунок 12.5).


Рис. 12.5: Программа к задаче 12.2 с использованием цикла с постусловием.

В данном примере был применен цикл с постусловием, в котором условие расположено после команды. То есть сначала выполняется движение вперед, затем проверяется условие. Если оно не выполняется, то продолжается движение вперед.

Можно поменять в условии знак неравенства (sensor1>15), но в этом случае необходимо поменять значения ветвей (рисунок 12.6). Теперь тело цикла будет повторяться, если условие выполняется, то есть робот движется пока расстояние до стены больше 15. Это также пример использования цикла с постусловием.


Рис. 12.6: Программа к задаче 12.2 с использованием цикла с постусловием.


Рис. 12.7: Программа к задаче 12.2 с использованием цикла с предусловием.

На рисунке 12.7 представлен пример программы с использованием цикла с предусловием. В данном цикле сначала проверяется условие. Если условие принимает ложное значение, то организуется проезд вперед. Если условие принимает истинное значение, происходит выход из цикла.

Задания для самостоятельного решения

1. Используя цикл, организовать объезд вокруг квадратного объекта.

2. Нарисовать 4 ряда по 4 одинаковых квадрата в 2D модели.

3. Подняться по лестнице, у которой 5 ступенек, без датчиков.

4. Используя цикл, составить программу вывода на экран контроллера цвета объекта, подносимого к датчику цвета.

5. Нарисовать окружность с более четко прорисованной нижней половиной, для этого нужно 3 раза проехать туда-обратно по нижней половине окружности, и только после этого дорисовать верхнюю дугу. Повторить это действие 5 раз.

6. Напишите программу, в которой робот рисует четырехцветную линию, цвета выбираются случайным образом.

7. Решить задачу «Кегельринг» с использованием цикла.

Параллельные задачи

Многие практические задачи требуется решать в реальном времени, для этого может потребоваться большой объем вычислений. Современные компьютеры могут выполнять несколько операции одновременно. Такой процесс называется параллельным вычислением, основная цель которых – уменьшение времени решения задачи. Контроллеры – не исключение, для организации параллельных процессов в TRIK Studio используются блоки «Параллельные задачи» и «Слияние задач».

Использовать параллельные задачи в цикле нельзя, так как процессы будут множиться до переполнения памяти контроллера. Кроме того, параллельные процессы должны быть независимы друг от друга, то есть решаемые задачи имеют разные цели, например, воспроизведение звука при движении по траектории.

Рассмотрим пример использования параллельных задач.

В задаче 12.2 (см. раздел 12) было организовано движение до стены с отъездом назад при ее обнаружении. Добавим в задаче постоянный вывод на экран информации о расстоянии до объекта. В этом случае нужно добавить блок «Параллельные задачи» и в одной из задач в бесконечном цикле организовать вывод показаний на экран (рисунок 13.1). При этом не забываем в редакторе свойств блока «Напечатать текст» в строке «Вычислять» поставить флажок «истина» для того, чтобы на экране в качестве текста выводилось значение величины sensor1.  


Рис. 13.1: Вывод на экран информации о расстоянии до объекта.

Таким образом, в программе параллельно организовано два цикла. Цикл с условием отвечает за движение до стены и отъезд назад. Бесконечный цикл обеспечивает постоянный вывод на экран контроллера расстояния до стены.

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

Первый способ – необходимо добавить счетчик (i), который будет отвечать за подсчет итераций ветви, где организован вывод информации о расстоянии (рисунок 13.2).


Рис. 13.2: Завершение программы с использованием счетчика.

В условии выхода из цикла необходимо подобрать такое значение счетчика, при котором, будет выполнена параллельная ей задача (проезд до стены). Если условие принимает истинное значение, то выводим информацию на экран и увеличиваем значение счетчика на 1. Если условие ложно, то происходит завершение цикла.

Этот способ также имеет недостаток, так как в каждом конкретном случае необходимо подбирать предельное значение счётчика для выполнения главной задачи.

Рассмотрим второй способ. Он заключается в отправке сообщения из главного потока некоторого сообщения-маркера, а в параллельной ему задаче проверяется, пришло ли сообщение. По пришедшему маркеру происходит завершение цикла.

Но сначала параллельным задачам необходимо дать имена. Имя главного потока – main, вспомогательную задачу обозначим, например, a 1 (рисунок 13.3).


Рис. 13.3: Завершение программы с использованием сообщений.

Затем в главном потоке после выполнения всех действий добавляем блок «Отправить сообщение в задачу» и в свойствах указываем название задачи (в нашем случае a 1) и сообщение (в нашем примере 1). В задаче a 1 добавляем переменную m =0, затем блок «Получить сообщение из другой задачи», в свойствах которого указываем переменную m и в строке «Дождаться сообщения» выставляем «ложь», то есть значение переменной будет равно нулю. А далее в условии проверяем, пришло сообщение или нет. Если сообщение не пришло (m =0), то продолжаем выводить информацию на экран. Если сообщение пришло (m =1), то завершаем задачу и, следовательно, завершаем всю программу.

И наконец, третий способ, наиболее простой, – завершить вторую задачу из главной задачи с помощью блока «Завершить задачу». Для этого достаточно добавить данный блок и указать имя той задачи, которую необходимо завершить (рисунок 13.4).


Рис. 13.4: Завершение программы с использованием блока «Завершить задачу»

Примечание: Блоки «Слияние задач», «Завершить задачу», «Получить сообщение из другой задачи» недоступны для программирования в режиме EV 3.

Задания для самостоятельного решения

1. Воспроизводить звук при движении робота по какой-либо траектории.

2. Робот проигрывает музыку и управляет цветовым сопровождением (подсветка контроллера).

3. Робот едет по траектории, с включенной сиреной (звуком) и проблесковым маячком (подсветка контроллера).

4. Придумайте задачу, для решения которой потребуется 4 параллельных потока.

5. Проходя некоторую траекторию, робот выводит на экран контроллера показания своего секундомера.


 

Вычисления

При изучении явлений природы и общества мы постоянно сталкиваемся с различными величинами. Одни из них являются постоянными, неизменяющимися, а другие меняются в зависимости от условий среды. Первые величины называются константами, вторые – переменными. В программировании переменная – это объект, которому дано имя и определенное значение.

Для объявления переменных и задания им определенных значений в TRIK Studio используется блок «Инициализация переменной» (см. раздел 2). В свойствах блока указывается имя переменной и ее значение.

Переменные имеют определенный тип, который должен быть известен во время компиляции. При этом язык TRIK Studio не требует (и даже не позволяет!) явно писать типы переменных, так как используется автоматический вывод типов по использованию переменных. Например, по выражению a = 1 среда «поймёт», что тип a – целое.

Базовые типы языка таковы:

· Логический (булевый) тип, принимает значения true (истина) и false (ложь).

· Вещественное число, использующее 64-битное представление binary64 стандарта IEEE 754 (позволяет хранить значения до 1.7E+308).

· Целое число, использующее 32-битное знаковое представление (позволяет хранить значения от -2,147,483,648 до 2,147,483,647).

· Строка, позволяет хранить символьные строки произвольной длины в кодировке UTF-8.

· Нулевой тип, имеющий только одно значение nil и означающий отсутствие "настоящего" значения.

· Тип "Таблица" (или массив), позволяющий хранить произвольное количество значений произвольного (но для каждого значения в одной таблице одинакового) типа, в том числе и другие таблицы, и обращаться к значениям по индексу.

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

Задача 14.1. Составить программу бесконечного движения вперёд-назад.

Воспользуемся блоком «Инициализация переменной» для объявления переменной х. В задаче к переменной х идет обращение 11 раз, и на каждом шаге значение меняется на противоположное: либо 1, либо (-1). При этом мощность моторов также является величиной изменяемой: 100 или (-100), так как скорость умножаем на величину х. При мощности (-100) действие «Моторы вперед» становится действием «Моторы назад» (рисунок 14.1).


Рис. 14.1: Программа к задаче 14.1.

    При объявлении сразу нескольких переменных или больших вычислений используется блок «Функция». Пример использования блока представлен на рисунке 14.2.


Рис. 14.2: Объявление нескольких переменных и вычисления.

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

    Рассмотрим подробнее о доступных математических выражениях и операциях.

    В арифметических выражениях доступны следующие операции:

· + – сложение, применимо к вещественным и целым значениям, результат целый, если оба аргумента целые, иначе вещественный.

· - – вычитание, применимо к вещественным и целым значениям, результат целый, если оба аргумента целые, иначе вещественный.

· * – умножение, применимо к вещественным и целым значениям, результат целый, если оба аргумента целые, иначе вещественный.

· / – деление, применимо к вещественным и целым значениям, результат вещественный.

· // – целочисленное деление, применимо к целым значениям, результат целый.

· ^ – возведение в степень, применимо к вещественным и целым значениям, результат вещественный.

· % – остаток от деления, применим к целым значениям, результат целый.

В математических выражениях можно использовать функции, доступные для любого конструктора:

· time – время в миллисекундах с начала работы программы;

· sin – синус, аргумент передаётся в градусах;

· cos – косинус, аргумент передаётся в градусах;

· ln – натуральный логарифм;

· exp – экспонента (e в степени аргумента);

· asin – арксинус;

· acos – арккосинус;

· atan – арктангенс;

· sgn – знак, возвращает 1, если аргумент положительный, -1, если отрицательный, и 0, если аргумент равен нулю;

· sqrt – квадратный корень аргумента, в случае, если аргумент отрицательный, переменной будет присвоено значение "nan" (Not A Number);

· abs – модуль аргумента;

· ceil – округляет переданный аргумент до целого в большую сторону;

· floor  – округляет переданный аргумент до целого в меньшую сторону;

· random – случайное число в интервале от 0 до переданного аргумента.

Приведем пример использования встроенной функции.

Задача 14.2. Вывести на экран контроллера время, прошедшее с начала исполнения.

В данном случае необходимо использовать встроенную функцию time. Организуем цикл, а результатом будет являться постоянный вывод на экран времени выполнения программы (рисунок 14.3). Не забываем в редакторе свойств блока «Напечатать текст» ставить флажок «Вычислять».


Рис. 14.3: Программа к задаче 14.2.

Уточним, что такое зарезервированные переменные. Как мы уже знаем к контроллеру можно подключать четыре датчика и четыре мотора. В каждый момент времени датчики возвращают некоторое числовое значение на контроллер. Это и есть значение переменных sensor N и encoder N.

Например, к порту 1 подключен датчик ультразвука. Робот находится вплотную около стены. Значение переменной sensor1 равно 0. После перемещения робота на некоторое расстояние от стены значение изменится в большую сторону. Таким образом, значение переменной sensor1 – это то, что показывает датчик в данный момент времени.

Кроме переменных sensor N и encoder N имеются переменные, отвечающие за состояние кнопок на корпусе робота: кнопки "Назад", "Вниз", "Ввод", "Влево", "Вправо", "Вверх" соответствующие переменным buttonBack, buttonDown, buttonEnter, buttonLeft, buttonRight, buttonUp. Значение 0 будет соответствовать не нажатой кнопке, 1 – нажатой.

Список переменных можно просмотреть на панели «Переменные» как в режиме «Отладка» (рисунок 14.4), так и в режиме «Редактор» (рисунок 14.5).


Рис. 14.4: Панель «Переменные» в режиме «Отладка».


Рис. 14.5: Панель «Переменные» в режиме «Редактор»

Задача 14.3. Найти среднее значение серого, используя датчик цвета в режиме яркости отраженного света (калибровка датчика цвета).

Найти значение серого можно вручную и автоматически, то есть выполнить вычисления в программе.

Ручная калибровка заключается в следующем. Помещаем робота так, чтобы датчик цвета располагался над белой поверхностью, фиксируем показания на экране контроллера.  Затем помещаем робота над черной поверхностью и снова фиксируем показания.  Допустим, показания над белой поверхностью составило 75%, а над черной – 15%. Осталось вычислить среднее значение: (75+15)/2=45.

А теперь реализуем калибровку автоматически.

Для этого подключим датчик цвета, выбрав режим света. При старте робот находится над белой поверхностью, снимает показания с датчика и записывает в переменную white, используя блок «Функция». Затем движется до черной линии, останавливается, снимает показания с датчика и записывает в переменную black. В блоке «Функция» организуем вычисление gray =(white + black)/2 и выводим значения переменных white, black и gray на экран (рисунок 14.6).


Рис. 14.6: Программа к задаче 14.3.

В программе используется по два одинаковых блока «Напечатать текст» для того, чтобы в первом блоке выводился текст – название цвета, а во втором – его значение. При запуске программы, на экране получим изображение как на рисунке 14.7.


Рис. 14.7: Результат выполнения программы.

Задача 14.4. На пол наклеены цветные линии. Робот проезжает над ними. Подсчитать количество красных линий и вывести на экран контроллера (рисунок 14.8).


Рис. 14.8: Внешний вид поля.

Подсчет организуем в бесконечном цикле. В переменной х будем хранить количество линий. Ее начальное значение равно нулю. При обнаружении линии нужного цвета значение переменной увеличивается на 1 и это значение выводим на экран (рис.14.9). Значение таймера нужно подбирать опытным путем, чтобы датчик цвета не подсчитывал одну линию несколько раз.


Рис. 14.9: Программа к задаче 14.4.


Задания для самостоятельного решения

1. Составить программу, в результате которой при нажатии на кнопки контроллера «Вправо» и «Влево» должна включится красная подсветка, а на кнопки «Вверх» и «Вниз» – оранжевая. Примечание: использовать зарезервированные переменные buttonUp, buttonDown, buttonLeft, buttonRight.

2. Робот движется в направлении к стене. Составить программу вывода на экран расстояния до стены.

3. Робот проезжает над цветными линиями. Составить программу вывода на


Поделиться с друзьями:

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

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.191 с.