Lego ev3 поворот на перекрестке

Обновлено: 11.05.2024

Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.

Обращаем Ваше внимание, что c 1 сентября 2022 года вступают в силу новые федеральные государственные стандарты (ФГОС) начального общего образования (НОО) №286 и основного общего образования (ООО) №287. Теперь требования к преподаванию каждого предмета сформулированы предельно четко: прописано, каких конкретных результатов должны достичь ученики. Упор делается на практические навыки и их применение в жизни.

Мы подготовили 2 курса по обновлённым ФГОС, которые помогут Вам разобраться во всех тонкостях и успешно применять их в работе. Только до 30 июня Вы можете пройти дистанционное обучение со скидкой 40% и получить удостоверение.

Столичный центр образовательных технологий г. Москва

Получите квалификацию учитель математики за 2 месяца

от 3 170 руб. 1900 руб.

Количество часов 300 ч. / 600 ч.

Успеть записаться со скидкой

Форма обучения дистанционная

Черная линия с перекрестками




После режима “Конструктор Мой блок” поворот налево:



После режима “Конструктор Мой блок” поворот направо:

Программа на определение цвета и внесения в переменные:


После режима “Конструктор Мой блок”:


Езда по линии и определение перекрестка:


После режима “Конструктор Мой блок”:


Основная структура программы:


Блок “Переключатель” первой ветки:

Ветка “5” (Красный цвет):


Ветка “2” (Синий цвет):


Ветка “4” (Желтый цвет):


Ветка “3” (Зеленый цвет):


Блок “Переключатель” второй ветки: Ветка “5” (Красный цвет):


Ветка “2” (Синий цвет):


Ветка “4” (Желтый цвет):


Ветка “3” (Зеленый цвет):



Курс повышения квалификации

Актуальные вопросы теории и методики дополнительного образования детей


Курс повышения квалификации

Актуальные вопросы теории и практики современного образования


Курс повышения квалификации

Формирование модели дополнительного образования детей в современных условиях


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

  • подготовка к ЕГЭ/ОГЭ и ВПР
  • по всем предметам 1-11 классов

Дистанционные курсы для педагогов

311 лекций для учителей,
воспитателей и психологов

Получите свидетельство
о просмотре прямо сейчас!

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

5 920 984 материала в базе

Ищем педагогов в команду «Инфоурок»

  • ЗП до 91 000 руб.
  • Гибкий график
  • Удаленная работа

Другие материалы

  • Учебник: «Физика», Перышкин А.В., Гутник Е.М.
  • Тема: Глава 1. Законы взаимодействия и движения тел

«Практический подход в работе с утратой смысла жизни: логотерапия»

Свидетельство и скидка на обучение каждому участнику

Вам будут интересны эти курсы:

  • Курс профессиональной переподготовки «Организация деятельности педагога-воспитателя группы продленного дня»
  • Курс профессиональной переподготовки «Преподаватель высшей школы. Преподавание и образовательные технологии в условиях реализации ФГОС»
  • Курс повышения квалификации «Особенности организации образовательной деятельности при домашнем обучении»
  • Курс повышения квалификации «Содержательные аспекты профессионального и личностного развития педагогических работников в рамках реализации профессионального стандарта»
  • Курс повышения квалификации «Специфика преподавания гражданского права с учетом реализации ФГОС»
  • Курс повышения квалификации «Целеполагание как основа современного образования в условиях реализации ФГОС»
  • Курс повышения квалификации «Применение современных педагогических технологий в образовательном процессе в условиях реализации ФГОС»
  • Курс профессиональной переподготовки «Педагогика и психология в системе специального образования»
  • Курс профессиональной переподготовки «Государственно-правовые дисциплины: теория и методика преподавания в образовательной организации»
  • Курс повышения квалификации «Методы интерактивного обучения»
  • Курс повышения квалификации «Использование методики Гленна Домана в работе с неговорящими детьми при подготовке к обучению грамоте»
  • Курс профессиональной переподготовки «Организация услуги по воспитанию детей в специальной (коррекционной) школе-интернат»

Оставьте свой комментарий

  • 17.03.2022 151
  • PDF 715.2 кбайт
  • 17 скачиваний
  • Оцените материал:

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

Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

Автор материала

40%

Московский институт профессиональной
переподготовки и повышения
квалификации педагогов

Дистанционные курсы
для педагогов

663 курса от 690 рублей

Выбрать курс со скидкой

Выдаём документы
установленного образца!

58 минут

«Тактические особенности самопрезентации»

61 минута

«Актуальные вопросы здоровьесбережения участников образовательного процесса в свете внедрения современных образовательных технологий»

70 минут

«Важнейшие особенности в диагностике личности»

Подарочные сертификаты

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

Все материалы, размещенные на сайте, созданы авторами сайта либо размещены пользователями сайта и представлены на сайте исключительно для ознакомления. Авторские права на материалы принадлежат их законным авторам. Частичное или полное копирование материалов сайта без письменного разрешения администрации сайта запрещено! Мнение администрации может не совпадать с точкой зрения авторов.

На данном уроке мы познакомимся с понятием линейного алгоритма, разберемся, как программировать движение робота Ev3.Линейный алгоритм это набор последовательных команд, которые выполняются только один раз. Команды следуют одна за другой в строго заданном порядке.
Например, рассмотрим алгоритм движения робота по квадрату.
Движение вперед на 1 оборот
Поворот робота на 90 градусов направо
Движение вперед на 1 оборот
Поворот робота на 90 градусов направо
Движение вперед на 1 оборот
Поворот робота на 90 градусов направо
Движение вперед на 1 оборот
Перед тем как реализовывать линейные алгоритмы движения познакомился, как программировать простейшие команды движения робота EV3.
Движение вперёд робота ev3.

1 действие. Движение вперёд робота ev3. Моторы робоат ev3 подключаются к портам с буквами: A B C D Все повороты делаются на мощностях меньше 50.
Сбрасываем датчик моторов в ev3.

датчик вращения мотора ev3

2 действие. Ставим цикл и в него ставим моторы на режиме «включить».

управление мотором ev3

3 действие. Выставляем мощность мотора на 100.

мощность мотора ev3

4 действие. Заходим в цикл, выставляем вращение мотора «градусы».

поворот моторами ev3

5 действие. Полный оборот колеса 360 градусов.
6 действие. Остановка моторов в режиме «выключить».

остановка моторов

Повороты робота EV3.Программа для поворота робота ev3

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

поворот ev3

Поворот робота ev3 в другую сторону

поворот в другую сторону ev3

1. действие. Чтобы поворачивать в другую сторону , необходимо поменять мощности моторов . Теперь мотор с портом A будет с отрицательной мощностью.

выбор порта мотора ev3

3 действие. Меняем порт мотора в конце цикла.

изменение мощности мотора

Движение робота EV3 назад

Чтобы обеспечить движение робота ev3 назад, устанавливаем отрицательную мощность обоих моторов .

Действие 1. В условии цикла необходимо будет поставить знак «меньше».

движение назад ev3

Действие 2. Ставим отрицательные значения градусов.

движение назад

Задание на урок

1. Собрать робота Ev3 на двух моторах,

2. Запрограммировать движение по квадрату

3. Запрограммировать трассу «змейка», объехать две кегли.

Фильм Девять (2009) » Кино обои HD

На данном уроке мы разберем движение робота Ev3 вдоль черной линии.

Напишем программу для движения робота по черной линии для Lego Ev3. Познакомимся с логическими операциями Ev3.

Для того, чтобы робот Ev3 двигался постоянно вдоль черной линии в программе используется бесконечный цикл в нем происходит считывание данных с датчиков цвета, освещенности, анализ данных датчиков и сооствесвующие маневры робота. В нашем роботе левый датчик цвета подключен к порту 3, правый датчик подсоединен к порту 1. Левый мотор подключен к порту В, правый мотор к порту А.

На рисунке показан блок считывания данных с датчика освещенности.


Если значение меньше 5 (знак сравнения 4) , то значит датчиком мы заехали на черную линию.

Если значение больше 5 (знак сравнения 2), то заехали на белое поле

Алгоритм движения по черной линии для робота с двумя датчиками следующий.

Если робот заехал левым датчиком на черную линию, то робот сворачивает (съезжает с линии) налево. Если робот заехал правым датчиком на черную линию, то поворачивает направо. Если обоими датчиками видит белое поле, то робот едет вперёд. Если обоими датчиками он видит чёрную линию, то это перекрёсток, он едет вперёд и съезжает с перекрестка.

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


Напишем программу для движения вдоль черной линии для робота Ev3.

У нашего робота левый датчик освещенности подключен к порту 3, правый датчик освещенности подключен к порту 1.

1 действие. Считываем данные с датчиков освещенности заходим в яркость, отраженного света Записываем их в логический блок И ( Красный блок)


2 действие. Соединяем логический блок с переключателем, который выставлен в логическое значение.



3 действие. В условие ставим поворот налево. Смотри урок 1 Повороты Ev3

движение робота по черной линии налево

4 Действие. Повторяем считывание датчиков освещенности и логический блок

Значение датчика освещенности 1 становится меньше 5, а датчика с портом 3 больше 5. В этом случае чёрную линию видит правый датчик. Поворот делается направо, поэтому правый мотор (порт А) вращается назад , мощность со знаком минус , а левый мотор (порт B) вращается вперед. Осуществляется поврот направо. В цикле движения выставите не очень большое время порядка 0,1 секунды, чтобы робот реагировал быстрее на изменение траектории.


движение по черной линии

5 действие. Если оба датчика освещенности фиксируют белое поле, то робот движется вперед. Опять считываем данные с обоих датчиков. Ставим в считывании датчиков знак больше, мощность обоих моторов положительная.

движение по черной линии

6 действие. Если оба датчика освещенности фиксируют чёрную линию, то движемся вперёд. Считывание датчиков, для обоих датчиков ставим меньше 5, для обоих моторов выставляем движение вперед

движение по черной линии

Для изменения скорости движения по черной линии необходимо поменять мощность моторов при дивжении вперед. Если траектория будет слишком крута и робот будет слетать с черной линии, необходимо уменьшить мощность при движении вперед и увеличить мощность при поворотах.

Задача проезда и подсчёта перекрёстков является классической в образовательной робототехнике. Существует несколько способов программного решения. Самый распространённый алгоритм: едем до «чёрного» - считаем – съезжаем с «чёрного», просто проехав вперёд заданное расстояние – снова едем до «чёрного». Но если ещё стоит задача остановиться на заданном перекрёстке, то при составлении программы обычно в цикле движения/подсчёта идёт проверка равенства числа преодолённых перекрёстков числу заданных. Эта проверка и выход из цикла происходит после съезда с перекрёстка. В итоге робот останавливается за линией. А если перекрёстки расположены на траектории (на чёрной линии), то при движении на регуляторе для съезда с перекрёстка используется временная задержка, регулятор временно не работает и возможен сход с линии. Проблема такого алгоритма в том, что условием обнаружения перекрёстка и началом счёта является регистрация датчиком/датчиками «чёрного». И этот процесс (если не ввести задержку счёта) продолжается, пока робот проезжает перекрёсток. Один из выходов – вести подсчёт в параллельной задаче/программе.


Фрагмент программы, в котором задержка счёта реализована командой звукового сигнала, который ещё и сигнализирует о выполнении счёта.

Рассмотрим другой вариант решения задачи. Для начала введём параметр «флаг», который может находиться в двух состояниях. Например, «1» - разрешён счёт перекрёстков, «0» - запрещён счёт перекрёстков. Алгоритм действий такой: флаг-1, едем до «чёрного» – проверяем состояние флага: если флаг - 1, то считаем перекрёсток, флаг - 0, едем до «белого» - флаг - 1. В итоге мы выполняем задачу без параллельного алгоритма, робот останавливается точно на перекрёстке и в случае движения по траектории непрерывно управляется при проезде перекрёстков. Фрагмент программы, в котором реализован вышеописанный алгоритм. Кроме того, выполнение цикла в примере прекращается при регистрации заданного числа перекрёстков.


Ещё одним достоинством данного алгоритма является то, что выбрав в качестве значений флага не 0 и 1, а 1 и -1, можно использовать параметр «флаг» в качестве переключателя для алгоритма пропорционального регулятора при движении на участках с «инверсией».

Для элементарной задачи простого проезда вперед через поперечные чёрные линии и остановки на заданной существует более простое решение:



немного об особенностях программирования в графической среде EV3

Блок ожидания является одним из простейших блоков в программном обеспечении EV 3 и предоставляет одну из простейших структур управления потоком. Его основная функция заключается, чтобы приостановить выполнение программы до определенного условия, а затем продолжить работу с программой. Например, "дождитесь нажатия сенсорного датчика" или ”подождите три секунды".

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

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

Благодаря этому обучающему занятию вы получите более глубокое понимание:

• как реализован и работает блок ожидания в программном обеспечении EV 3,

• как использовать цикл в качестве структуры управления потоком,

• как программировать выполнение нескольких условий.

Упражнение 1: Дождитесь нажатия сенсорного датчика

В следующем примере программа ожидает нажатия сенсорного датчика для запуска вращения мотора на один оборот.


Дождитесь нажатия сенсорного датчика для запуска мотора.

Эта команда ожидания очень полезна для создания простой короткой программы. Интересно, что многие другие языки программирования не имеют ничего непосредственно эквивалентного. Как мы можем достичь того же результата, не используя команду ожидания?

Команда ожидания на самом деле просто цикл, который повторяется, пока не будет выполнено определенное условие. Это скрыто от пользователя, но если бы вы могли видеть, как блок ожидания касания реализован в программном обеспечении EV 3, это было бы эквивалентно команде цикла в этом примере…


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

Обратите внимание, что цикл может быть пустым.

Если мы хотим запустить мотор навсегда, мы можем сделать это с блоком ожидания?

Да, но не элегантно. Нам нужно поставить блок мотора перед блоком ожидания, который установлен в состояние, которое никогда не будет выполнено. Например…


Запустить мотор навсегда и дождаться нажатия сенсорного датчика

Если мы хотим использовать сенсорный датчик, чтобы точно остановить мотор, мы можем улучшить эту программу, добавив блок выключения мотора после сенсорного блока ожидания. Установите блок выключения мотора с торможением в конце. Например…


Запустите двигатель до нажатия сенсорного датчика,

затем затормозите двигатель

Как мы можем достичь той же функции с помощью цикла?


Запустите двигатель до нажатия сенсорного датчика

Блок цикла также может быть установлен в режим «неограниченный». То есть цикл никогда не закончится (если только блок прерывания цикла не используется в другой части программы).


Запустите двигатель навсегда,

используя пустой неограниченный цикл

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

Рассмотрим следующую программу и выясним, чем она отличается от предыдущей.


Запустите двигатель навсегда, используя неограниченный цикл

Обе программы эквивалентны в действии, так каковы различия?

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

Упражнение 2: ждать больше, чем одно условие

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

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


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

Эта программа может отлично работать в некоторых ситуациях, но у нее есть некоторые проблемы…

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

2. Каждая последовательность повторяет все блоки действия, в нашем случае, запуск вращения мотора на один оборот. Мы должны стремиться по возможности уменьшить повторный код.

3. Что произойдет, если сразу после нажатия сенсорного датчика датчик цвета обнаружит черный цвет? Двигатель будет работать в течение более чем одного оборота

Итак, как мы можем написать лучшую программу?

Нам нужно использовать цикл.


Дождитесь, пока сенсорный датчик или датчик цвета «включат» двигатель

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


Дождитесь, пока сенсорный датчик и датчик цвета «включат» двигатель

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

Итак, для соревнования 27 февраля в той программе, что уже есть, придется вносить изменения: когда объявлена трасса, по которой нужно проехать в данной попытке, наши юные спортсмены должны САМОСТОЯТЕЛЬНО запрограммировать все повороты робота на перекрестках, которые он будет проезжать.

Поэтому данный материал полезен и тем, которые программу не доделали, и тем, у которых робот уже успешно проехал первую заданную трассу от старта до финиша. Потому что на соревнованиях трасса будет МЕНЯТЬСЯ.

Для начала вспомним структуру нашей программы. Главный блок (Program) выполняем цикл, в котором происходят основные события: робот едет по линии (за это отвечает блок Move), проверяет, не доехал ли он до перекрестка и считает их количество (блоки Krest и AddCount) и поворачивает в нужную сторону (блок Povorot). Выглядит главный блок так:


С блоками Move и Krest все разобрались хорошо - робот по линии едет, перекрестки считаются. Для того чтобы правильно выполнить повороты, заглянем сначала внутрь предпоследнего блока - AddCount, которые эти повороты считает. Сначала мы сделали его таким:


Что делает этот блок? Он выполняет свою главную работу - увеличения значения переменной Count (счетчик поворотов) на 1 и установку переменной OkPov (признак, разрешающий выполнение поворота) в единицу. Но кроме этого, в конце блока стоит звуковой сигнал: робот произносит слово "Detected", что означает "Обнаружен". Это полезно, когда мы только пишем программу и учимся искать перекрестки, но еще не умеем поворачивать. Поэтому после того, как выполнение поворотов запрограммировано, этот звук не очень нужен.

Тем не менее, звуковой блок остался в программе: он выполняет роль задержки. Последний параметр этого блока (со значением 0) задает режим ожидания, пока звук не будет воспроизведен. За это время робот, движущийся с небольшой скоростью, успевает выехать на перекресток, где он должен поворачивать. Те спортсмены, которые выбирали ДРУГОЙ звук для воспроизведения в этом блоке, могли заметить, что робот не доезжает до перекрестка (это если звук короткий) или переезжает и поворачивает позже, чем нужно (если звук длинный). Чтобы избежать влияния длительности звука на поведение робота, можно звуковой блок убрать совсем, или установить последний параметр воспроизведения в 1 (не ждать завершения):


Вот теперь можно поговорить о поворотах. Блок Povorot для каждого значения номера перекрестка Count выполняет нужные для этого перекрестка действия (поворот направо, налево или проезд без поворота). Пусть на первом перекрестке роботу нужно повернуть НАЛЕВО, для этого можно выполнить следующую последовательность действий:


Здесь использовано два блока движений. Первый (направление - прямо) доезжает до центра перекрестка. Изменяемый параметр - угол поворота колес (на рисунке - 100 градусов). Значение его зависит от конструкции робота (насколько вперед вынесены световые датчики) и от того, использовался ли в блоке AddCount звук с задержкой. Может оказаться что у Вашего робота этот параметр равен 0.

Второй блок движения выполняет собственно поворот (на рисунке - налево). Изменяемый параметр тот же - угол поворота колес (на рисунке - 200 градусов). Данное значение параметра для нашего робота обеспечивает поворот практически на прямой угол. Если робот недоворачивает, это значение нужно немного увеличить, если поворачивает слишком сильно - уменьшать.

В результате КАЖДОГО поворота робот должен оказаться на той линии, по которой он должен продолжить движение, причем эта линия должна находиться МЕЖДУ его световых датчиков. В таком положении он сразу может продолжить движение без выравнивания. Если хотя бы один датчик робота после поворота оказался НАД черной линией, значение параметров нужно изменять.

Отладив первый поворот, дальше намного проще запрограммировать остальные. Пусть на втором повороте робот должен повернуть направо. Нажатием на кнопку с крестиком добавляем вкладку с цифрой 2 (цифру нужно написать самому!), и копируем в нее все блоки с первой вкладки. После этого меняем направление поворота на противоположное, заодно меняем звуковой файл, чтобы робот сказал "Two", что по-английски означает "два":


Осталось разобраться с проездом перекрестка без поворота. Можно оставить соответствующую вкладку (например, третью) пустой, но это не очень удобно. Нам нужно знать, что робот правильно "сосчитал" перекресток. Поэтому звуковой блок с нужным номером лучше оставить. К тому же, если на перекрестке от линии отходит еще одна (вправо или влево), то робот при определении перекрестка может немного сбиваться с курса (в сторону отходящей линии). Поэтому проезжать вперед не обязательно, но желательно вернуть робота на линию небольшим поворотом в сторону, противоположную отходящей линии (на рисунке - влево):


Так же добавляем остальные повороты - 4 , 5 , 6 и дальше до десятого (но обычно поворотов на трассе меньше). Звуковые файлы для этих поворотов вы найдете в папке "Числа" в звуковых файлах LEGO: "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten". (Хорошо тому, кто умеет считать по-английски до десяти!). Вот и трасса для тренировки готова! На финише желательно остановиться, что не составит никакого труда, ведь робот распознает финишную черту как очередной поворот. Поэтому, если мы финишируем после пятого поворота, то программируем финиш как поворот номер шесть:


Чтобы было понятно, что это финиш, робот произносит соответствующее слово (например "Stop" или "Ready", что означает "Готово"). После этого ставим блок прерывания цикла. Поскольку в нашей программе всего один цикл - это главный цикл в блоке Program, то программа завершается и робот останавливается. Если при этом хочется, чтобы он заехал за линию финиша, то можно перед прерыванием цикла поставить блок движения вперед, но это уже предлагается сделать Вам самостоятельно.

Итак, мы научились программировать прохождение заданной траектории на трассе. Если на соревнованиях траектория, предложенная судьей перед попыткой, совпадает с той, нам которой Вы уже тренировались и такая программа на роботе уже есть - радуемся и сразу идем тренироваться. Если же траектория окажется другой - определяем количество перекрестков, какой поворот выполняем на каждом, меняем и отлаживаем программу. Всем успехов на соревнованиях!

Что непонятно - пишите, пожалуйста! Если все понятно - тоже можно написать :)

Читайте также: