Для работы с данными в языке программирования NXT-G предлагается специальная серия команд. Эти команды объединены на вкладке Data (Данные) программного обеспечения. Рассмотрим подробнее назначение и параметры каждой команды (см. таблицу 6). Таблица 6. Назначение и параметры команд вкладки Данные
Перед тем, как начать работу с данными, стоит подумать о том, откуда они появляются в памяти робота. Ответ на этот вопрос очевиден. Робот получает большую часть информации из окружающей среды при помощи различных датчиков. Оставшийся небольшой процент данных вносит в память робота программист во время написания очередной программы. Вывод: при работе с блоками данной группы Вы будете использовать данные с датчиков либо введенные Вами вручную значения. Второй важный вопрос заключается в том, куда выводится результат выполнения команд. Здесь возможностей намного больше. Результат вычисления может быть выведен на экран дисплея, на динамик, а также помещен в любой подходящий по типу параметр другой команды или в файл. Например, Ваш робот может вычислить выражение 15 * 3 и результат записать в параметр Power (Мощность) команды Move (Движение). После этого на соответствующий мотор будет подана мощность, равная 45. Рассмотрим примеры программ с использованием изученных команд. Пусть робот движется прямо до тех пор, пока ему не встретится препятствие в 30 см от него. После этого робот генерирует (выдает) случайное число в диапазоне от 20 до 70. Это число он делит на константу, равную 5. Если результат больше 10, робот поворачивает направо (отключает мотор С), если меньше 10 – налево (отключает мотор В). На рисунке 188 изображена готовая программа. Рис. 188 Программа движения робота по закону логики Поясним текст программы. Надеюсь, назначение внешнего цикла не является для Вас загадкой. Уже неоднократно повторялось, что он необходим для работы программы от момента включения до выключения ее на микроконтроллере. Первая команда создает константу, присваивая ей имя Con1 и значение 5. Затем в цикле по значению (а именно, ожидание менее 30 см на ультразвуковом датчике) моторы В и С запускаются вперед с одинаковой мощностью. Как только цикл завершится, это будет означать что робот «увидел» препятствие. Робот остановится. Команда Random сгенерирует случайное число. Это число делится на константу, т.е. на 5. (В этом случае создание константы необязательно. Она создана в программе в качестве примера использования команды). Полученное от деления частное проверяется командой Compare (Сравнение). Если получилось значение больше 10, то команда передает в переключатель Switch логическое значение Истина. В этом случае в переключателе выполнится верхняя ветка. Если результат деления окажется меньше 10, в итоге выполнится нижняя ветка Switch.
Второй пример будет посвящен работе с командой Logic (Логика). Представим, что Ваш робот движется вперед. Условием его остановки будет либо пересечение черной линии, ограничивающей тестовое поле, либо наличие препятствия в 10 см от робота. В этом случае Вам придется применить в программе логическую операцию ИЛИ (OR). На рисунке 189 изображен вариант программного кода для этой задачи. Рис. 189 Пример программы с применением логической операции ИЛИ (OR) В данном примере цикл работает до тех пор, пока не будет передано истинное значение от команды Logic (Логика). Эта команда выполняет логическую операцию ИЛИ (OR), операндами (входными данными) которой являются показания датчиков ультразвука и освещенности. В цикле постоянно считываются показания с датчиков и, как только на одном из них появится истинное значение, команда Логика передаст его в цикл, и он завершится. Истинное значение команды Sensor (Датчик) отправят, если значение на датчике расстояния меньше 10 или значение на датчике освещенности меньше 40 (черная линия). Чтобы лучше разобраться в работе команды Logic, вернитесь к таблице истинности и посмотрите на результат операции ИЛИ при различных значениях. Приведем еще один пример работы с командами группы Данные. На этот раз покажем передачу результата в параметры других команд. Запрограммируем робота-охранника, который будет вращаться со случайной скоростью в случайно выбранную сторону. Как только значение на ультразвуковом датчике будет меньше 25 см (робот увидел чужих), динамик воспроизведет звуковой сигнал предупреждения. Один из вариантов программы представлен на рисунке 190. В этой программе цикл работает до тех пор, пока на датчике расстояния не будет значения, меньшего 25 см. В цикле генерируется случайное число в диапазоне от 0 до 100. Для работы переключателя Switch проверяется вхождение сгенерированного числа в диапазон от 20 до 70. Если число в него входит, выполняется верхняя ветка, иначе – нижняя. Мощность моторов, как Вы можете заметить, передается из переменной. В переменную она записывается тоже от генератора случайного значения. Сгенерированное случайное число делится на 2, результат деления помещается в переменную, а внутри переключателя это число из переменной копируется в параметр Power (Мощность) команд Motor (Мотор).
Рис. 190 Вариант программы работы со случайными значениями
Практическая работа №34 – «Математик»: Составьте программу для робота, которая вычисляет значение выражения (78 - 50)*3+ 2 и выводит результат на экран дисплея в третью строку.
Практическая работа №35 – «Случайности не случайны»: Составьте программу движения робота. Пусть мощность каждого мотора определяется отдельно случайным образом. Комментарии к заданию Вы можете использовать одну команду Random, но применять к результату ее работы разные арифметические операции для каждого из моторов. В итоге значения мощности будут определяться по-разному.
Практическая работа №36 – «Логика»: Вспомните программу движения робота с двумя датчиками освещенности по черной линии. Она рассматривалась в главе 4 «Сенсорные системы» в параграфе 4. Составьте программу движения робота с двумя датчиками освещенности по черной линии, используя команду Logic. Комментарии к заданию Команда Логика позволит Вам проверять значения на обоих датчиках одновременно. Двигаться вперед робот должен тогда, когда на обоих сенсорах одинаковые значения (оба на черном или оба на белом). Используйте логическую операцию XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ). Она выдает в результате 0, если входные значения равны и единицу, если они различны.
Практическая работа №37 – «Диапазон»: Составьте программу движения робота вперед, в которой во время движения генерируется случайное число от 0 до 100 и проверяется его вхождение в диапазон от 10 до 20. Если число входит в диапазон, робот останавливается и издает звуковой сигнал. |
Поделиться с друзьями: