Arduino:Знакомство с Arduino/Среда разработки
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Среда разработки (IDE) Arduino[1]
Интегрированная среда разработки Arduino (она же IDE Arduino) содержит текстовый редактор для написания кода, область для сообщений, текстовую консоль, кнопочную панель инструментов (для самых ходовых функций), а также несколько меню. Кроме того, IDE Arduino умеет подключаться к платам Arduino и Genuino, и это нужно, например, для загрузки скетчей и коммуникации между пользователем и аппаратной составляющей Arduino.
Написание скетчей
Программы, написанные в среде разработки Arduino, называются скетчами. Они пишутся в текстовом редакторе IDE и сохраняются в файлах с расширением *.ino. В редакторе есть функции для вырезания/вставки, а также для поиска/замены текста. Область для сообщений дает обратную связь при сохранении и экспорте скетчей, а также отображает ошибки. Консоль отображает текстовые данные, исходящие от IDE, включая полные сообщения об ошибках и другую информацию. В нижнем правом углу окна отображаются плата и последовательный порт, настроенные в данный момент. Кнопочная панель инструментов дает возможность проверять, загружать, создавать, открывать и сохранять скетчи, а также открывать последовательный монитор.
Примечание. Версии IDE Arduino до 1.0 сохраняют скетчи с расширением *.pde. Впрочем, в версии 1.0 эти скетчи открывать все же можно, но при сохранении вас попросят дать этим скетчам расширение *.ino.
Кнопки на панели инструментов:
- Проверить (Verify) – Проверяет код на ошибки посредством компиляции.
- Загрузка (Upload) – Компилирует код и загружает его на сконфигурированную плату. Подробнее о загрузке читайте ниже.
- Примечание: Если к плате подключен внешний программатор, при использовании этой кнопки можно зажать на компьютерной клавиатуре клавишу ⇧ Shift . Текст изменится на «Загрузить через программатор» (Upload using Programmer).
- Новый (New) – Создает новый скетч.
- Открыть (Open) – Показывает меню со всеми скетчами, находящимися в вашей папке со скетчами (т.е. в так называемом «скетчбуке»). Если кликнуть на один из этих скетчей, он перезапишет тот, что находится в окне в данный момент времени.
- Примечание: Из-за бага в Java это меню не скроллится, поэтому, если вам надо открыть скетч, находящийся в конце списка, используйте для этого меню Файл > Папка со скетчами (File > Sketchbook).
- Сохранить (Save) – Сохраняет скетч.
- Монитор порта (Serial Monitor) – Открывает монитор последовательного порта (подробнее о нем читайте ниже).
Дополнительные команды IDE Arduino можно найти в меню Файл (File), Правка (Edit), Скетч (Sketch), Инструменты (Tools) и Помощь (Help). Эти меню контекстно-зависимы, т.е. они будут доступны лишь в том случае, если имеют отношение к выполняемой работе.
Меню «Файл»:
- Новый (New) – Создает новый экземпляр текстового редактора, в котором уже будет минимальный код для создания нового скетча.
- Открыть (Open) – Позволяет загрузить скетч, ища его в дисках и папках компьютера.
- Открыть недавние (Open Recent) – Выдает короткий список недавно открытых скетчей, уже готовых к работе.
- Папка со скетчами (Sketchbook) – Показывает скетчи, находящиеся в данный момент в папке со скетчами (т.е. в «скетчбуке»). Если кликнуть по названию какого-либо из показанных скетчей, он тут же откроется в новом экземпляре IDE Arduino.
- Примеры (Examples) – Тут будут показаны все примеры и библиотеки, идущие в комплекте с IDE Arduino. Все примеры структурированы в древовидную форму, что позволяет быстро найти нужную тему или библиотеку.
- Закрыть (Close) – Закрывает текущий экземпляр IDE Arduino.
- Сохранить (Save) – Сохраняет скетч под текущим названием. Если файл еще не был назван, название будет предложено в окне «Сохранить как…» (Save as…).
- Сохранить как… (Save as…) – Дает возможность сохранить текущий скетч под другим названием.
- Настройки страницы (Page Setup) – Показывает окно «Настройки страницы» для печати скетча на принтере.
- Печать (Print) – Отсылает текущий скетч на принтер в соответствии с настройками, заданными в меню «Настройки страницы».
- Настройки (Preferences) – Открывает окно «Настройки», где можно, соответственно, подправить некоторые настройки IDE Arduino. К примеру, язык интерфейса.
- Выход (Quit) – Закрывает все окна IDE Arduino. Впрочем, когда вы запустите IDE Arduino в следующий раз, все скетчи, которые были открыты при нажатии на «Выход», автоматически откроются заново.
Меню «Правка»:
- Отменить/Вернуть (Undo/Redo) – Команда «Отменить» возвращает работу в текстовом редакторе на один или несколько шагов назад, а «Вернуть» позволяет вернуться вперед.
- Вырезать (Cut) – Удаляет выбранный фрагмент кода и помещает его в буфер.
- Копировать (Copy) – Дублирует выбранный фрагмент кода и помещает его в буфер.
- Копировать для форума (Copy for Forum) – Копирует выбранный фрагмент кода в буфер, попутно приводя его в надлежащий вид для публикации на форуме (вместе с цветовой подсветкой синтаксиса).
- Копировать в HTML (Copy as HTML) – Копирует выбранный фрагмент кода в буфер в HTML-виде, чтобы его можно было встроить в веб-страницы.
- Вставить (Paste) – Вставляет содержимое буфера в то место редактора, где находится курсор.
- Выделить все (Select All) – Выбирает и высвечивает все содержимое текстового редактора.
- Добавить/Удалить комментарий (Comment/Uncomment) – Добавляет или удаляет знак комментария (т.е. «//») в начале каждой строки в выбранном фрагменте кода.
- Увеличить/Уменьшить отступ (Increase/Decrease Indent) – Добавляет или убирает пустое пространство (как при нажатии на кнопку « Пробел ») в начале каждой строки в выбранном фрагменте кода.
- Найти (Find) – Открывает меню «Найти», где вы, задав определенные параметры, можете указать текст, который нужно найти в текущем скетче.
- Найти далее (Find Next) – Высвечивает в тексте следующий (по отношению к положению курсора) искомый фрагмент, заданный в меню «Найти».
- Найти предыдущее (Find Previous) – Высвечивает в тексте предыдущий (по отношению к положению курсора) искомый фрагмент, заданный в меню «Найти».
Меню «Скетч»:
- Проверить/Компилировать (Verify/Compile) – Проверяет скетч на ошибки, компилируя его. Данные о проверке, включая информацию об используемой памяти и глобальных переменных, будут показаны в консоли.
- Загрузка (Upload) – Компилирует и загружает бинарный файл на сконфигурированную плату через сконфигурированный порт.
- Загрузить через программатор (Upload Using Programmer) – Перезаписывает загрузчик на плате. Позволяет использовать для скетчей полный объем Flash-памяти. Чтобы восстановить перезаписанный загрузчик и снова получить возможность загружать скетчи через последовательный USB-порт, вам надо будет воспользоваться пунктом Инструменты > Записать загрузчик (Tools > Burn Bootloader). Имейте в виду, что это команда НЕ ЗАПИСЫВАЕТ фьюз-биты – для этого используется, опять же, пункт Инструменты > Записать загрузчик (Tools > Burn Bootloader).
- Экспорт бинарного файла (Export Compiled Binary) – Сохраняет скетч в формате *.hex, который можно хранить в виде архива либо отправить на плату при помощи других инструментов.
- Показать папку скетча (Show Sketch Folder) – Открывает папку текущего скетча.
- Подключить библиотеку (Include Library) – Добавляет к скетчу библиотеку, используя для этого директиву #include, вставляемую в начало кода. Более подробно читайте ниже, в разделе «Библиотеки». Кроме того, здесь можно открыть «Менеджер библиотек» и с его помощью добавить из ZIP-файлов новые библиотеки.
- Добавить файл... (Add File…) – Добавляет в скетч новый файл (он будет скопирован из того места, где находится в данный момент). Новый файл появится в новой вкладке текущего окна IDE Arduino. Файл можно удалить при помощи меню закладок, которое открывается при нажатии на маленький треугольник, находящийся под иконкой монитора порта с правой стороны от панели инструментов.
Меню «Инструменты»:
- АвтоФорматирование (Auto Format) – Красиво форматирует скетч, т.е. добавляет к нему отступы, чтобы открывающие и закрывающие фигурные скобки были выстроены в одну линию, а операторы внутри фигурных скобок стояли еще правее.
- Архивировать скетч (Archive Sketch) – Архивирует копию текущего скетча в ZIP-файл. Архив помещается в ту же директорию, где находится скетч.
- Исправить кодировку и перезагрузить (Fix Encoding & Reload) – Исправляет возможные расхождения между картой символов редактора IDE Arduino и картами символов других ОС.
- Монитор порта (Serial Monitor) – Открывает окно монитора порта и инициирует обмен данными с любой подключенной платой через выбранный в данный момент порт. Как правило, это включает у платы сброс, но только в том случае, если она поддерживает сброс через открытие последовательного порта.
- Плата (Board) – Выбирает плату, которую вы будете использовать. Описания разных плат можно прочесть ниже в разделе «Платы».
- Порт (Port) – В этом меню отображаются все устройства с последовательным интерфейсом (реальные и виртуальные), подключенные к плате. Этот список автоматически обновляется каждый раз, когда вы открываете меню «Инструменты», находящееся уровнем выше.
- Программатор (Programmer) – Используется для выбора аппаратного программатора, если программирование платы или чипа осуществляется не при помощи встроенного USB-последовательного соединения. Как правило, эта команда используется редко, но может пригодиться, к примеру, при записи загрузчика на новый микроконтроллер.
- Записать Загрузчик (Burn Bootloader) – Позволяет записать загрузчик на микроконтроллер платы Arduino. При обычном использовании Arduino или Genuino эта команда не требуется, однако она может пригодиться, если вы купили новый микроконтроллер ATmega (который, как правило, поставляется без загрузчика). Перед записью загрузчика убедитесь, что выбрали правильную плату – это делается в меню Инструменты > Плата (Tools > Board). Этой командой также устанавливаются нужные фьюз-биты.
Меню «Помощь»:
Здесь осуществляется быстрый доступ к множеству документов, идущих в комплекте с IDE Arduino, т.е. их можно читать, даже не имея доступа к интернету. Тут есть статьи «Для начинающих», «Справочник» по языку Arduino, руководство по IDE и пр. Все эти документы являются локальными копиями тех, что расположены на сайте Arduino, и имеют ссылки для перехода на свои онлайн-версии.
- Найти в Справочнике (Find in Reference) – Это единственная интерактивная функция в меню «Помощь». Она позволяет напрямую открыть локальную статью об элементе языка Arduino, на котором в данный момент стоит курсор в текстовом редакторе IDE.
Папка со скетчами (Скетчбук)
Среда разработки Arduino использует идею скетчбука, т.е. определенного места, где хранятся все ваши программы (или скетчи). Скетчи, находящиеся в этой папке, можно открыть из меню Файл > Папка со скетчами (File > Sketchbook) или через кнопку «Открыть» на панели инструментов. Папка со скетчами будет создана автоматически при самом первом запуске IDE Arduino. Посмотреть или изменить расположение скетчбука можно в меню «Настройки».
Примечание: Начиная с версии 1.0 скетчи сохраняются с расширением *.ino. Ранее они сохранялись в формате *.pde. Впрочем, даже работая с версией 1.0 и выше, вы по-прежнему можете открывать PDE-файлы, но IDE будет автоматически переименовывать их в расширение *.ino.
Вкладки
Позволяют управлять скетчами, содержащими больше одного файла (каждый из которых будет находиться в собственной вкладке). Это могут быть обычные файлы в виде кода для Arduino (расширения не видно), C файлы (расширение *.c), C++ файлы (расширение *.cpp) и «заголовочные» файлы (расширение *.h).
Загрузка
Перед загрузкой скетча вам надо выбрать правильные пункты в меню Инструменты > Плата (Tools > Board) и Инструменты > Порт (Tools > Port). Список плат можно найти ниже в разделе «Платы». На Mac последовательный порт будет, вероятно, /dev/tty.usbmodem241 (для Uno, Mega2560 или Leonardo), /dev/tty.usbserial-1B1 (для Duemilanove и других ранних USB-моделей) или /dev/tty.USA19QW1b1P1.1 (для платы с последовательным соединением, подключенной при помощи USB-последовательного адаптера Keyspan). На Windows это будет, возможно, COM1 или COM2 (для платы с последовательным подключением), COM4, COM5, COM7 или выше (для плат с USB-соединением) – чтобы выяснить, ищите USB-последовательное устройство в Диспетчере Устройств в секции с портами. На Linux это должен быть /dev/ttyACMx, /de/ttyUSBx или что-то вроде этого. Выбрав правильные порт и плату, нажмите на кнопку «Загрузка», находящуюся на панели инструментов, или выберите пункт «Загрузка» в меню «Файл». Плата, подключенная к IDE, автоматически сбросится, после чего начнется загрузка. У старых моделей (т.е. у предшественников Diecimilia) автоматического сброса нет, поэтому вам перед загрузкой скетча придется нажимать на кнопку сброса самостоятельно. На большинстве плат после загрузки скетча начинают моргать RX- и TX-светодиоды. Кроме того, если загрузка будет выполнена успешно, об этом сообщит и IDE Arduino, а если нет – покажет ошибку.
Загружая скетч, вы используете загрузчик Arduino – маленькую программу, загруженную в микроконтроллер вашей платы. Она позволяет загружать код без использования дополнительного оборудования. Загрузчик активен в течение нескольких секунд, пока плата находится в режиме сбрасывания, а затем запускает скетч, который был загружен в микроконтроллер самым последним. Когда загрузчик запустится (т.е. когда у платы будет запущен режим сбрасывания), на плате начнет моргать встроенный (13-ый) светодиод.
Библиотеки
Благодаря библиотекам скетчи можно снабдить дополнительным функционалом – например, для работы с новым оборудованием или манипуляцией данных. Чтобы использовать в скетче какую-либо библиотеку, выберите ее в меню Скетч > Подключить библиотеку (Sketch > Include Library). Это добавит в начало скетча одну или несколько директив #include, а также скомпилирует библиотеку вместе со скетчем. Поскольку библиотеки загружаются на плату вместе со скетчем, из-за этого увеличивается объем места, занимаемого скетчем. Если библиотека больше не нужна, просто удалите из верхней части кода директивы #include.
Список библиотек можно найти здесь. Некоторые библиотеки уже идут в комплекте с IDE Arduino, а другие можно загрузить из различных источников при помощи «Менеджера библиотек».
Начиная с версии 1.0.5 библиотеку можно добавить из ZIP-файла и использовать ее в открытом скетче. Инструкции по установке сторонней библиотеки можно прочесть тут. Если вы хотите написать собственную библиотеку, читайте этот туториал.
Оборудование от сторонних разработчиков
Поддержку стороннего оборудования можно добавить через создание в папки со скетчами подпапки hardware. Тем самым в IDE можно добавить файлы, содержащие информацию о плате (отображается в меню «Плата»), корневые библиотеки, загрузчики и информацию о программаторах. Чтобы установить платформу, создайте папку hardware, а затем распакуйте стороннюю платформу в ее собственную подпапку. Не давайте подпапке название «arduino», т.к. это перезапишет встроенную платформу Arduino. Чтобы удалить платформу, просто удалите ее подпапку.
Более подробно о создании пакетов для стороннего оборудования читайте тут.
Монитор порта
Здесь отображаются данные, идущие от Arduino/Genuino (поддерживаются и обычные, и USB-модели) на компьютер по последовательному интерфейсу. Чтобы отправить данные плате, введите текст, а потом кликните на кнопку отправки или просто нажмите ↵ Enter . В выпадающем списке веберите скорость передачи данных, соответствующую скорости, указанной в Serial.begin вашего скетча. Имейте в виду, что на Windows, Mac и Linux при подключении через монитор порта плата Arduino/Genuino выполнит сброс (т.е. вернет выполнение скетча в начальное положение). «Разговаривать» с платой можно также через Processing, Flash, MaxMSP и т.д. Более подробно читайте тут.
Настройки
Некоторые настройки можно задать в меню «Настройки» (на Mac оно находится в меню Arduino, а на Windows и Linux – в «Файл»). Все остальное находится в файле настроек, месторасположение которого указано в том же меню «Настройки».
Языковая поддержка
Начиная с версии 1.0.1, интерфейс IDE Arduino поддерживает более 30 языков. По умолчанию в IDE Arduino будет выбран язык, выбранный в вашей операционной системе. Но обратите внимание, что на Windows, а также, возможно, на Linux, это определяется локальными настройками дат и валюты, а не языком, которым «озвучена» операционная система.
Если вы хотите вручную поменять языковые настройки, запустите IDE Arduino и откройте окно «Настройки» (Preferences). Рядом с надписью «Язык редактора» (Editor Language) будет выпадающее меню со списком поддерживаемых в данный момент языков. Выберите нужный язык, а затем перезапустите IDE Arduino. Если язык вашей ОС не поддерживается, то интерфейс IDE Arduino будет автоматически переведен на английский.
Чтобы вернуть языковые настройки к настройкам по умолчанию, в выпадающем меню «Язык редактора» (Editor Language) нужно выбрать «По умолчанию» (System Default). Это изменение вступит в силу лишь после того, как вы перезапустите IDE Arduino. Кроме того, если вы поменяли языковые настройки ОС, то для того, чтобы в IDE Arduino появился новый язык, ее тоже нужно перезагрузить.
Платы
Выбор платы имеет два эффекта: он задает параметры (например, скорость работы процессора и скорость передачи данных), используемые при компиляции и загрузке скечтей, а также устанавливает настройки для файлов и фьюз-битов, используемые командой записи загрузчика. Характеристики некоторых плат отличаются только по последним параметрам, поэтому даже если все загрузилось успешно, перед записью загрузчика их все же имеет смысл проверить. Таблицу, сравнивающую характеристики разных моделей, можно найти тут.
Ниже перечислены платы, для которых в IDE Arduino имеется встроенная поддержка, и все они базируются на ядре AVR. Кроме того, «Менеджер плат», имеющийся в стандартной версии IDE Arduino, позволяет добавить поддержку новых плат с другими ядрами – вроде Arduino Due, Arduino Zero, Edison, Galileo и т.д.
- Arduino Yun. Процессор ATmega32u4 на 16 МГц (с автоматическим сбросом), 12 входных аналоговых контактов, 20 входных/выходных (I/O) цифровых контактов, семь каналов широтно-импульсной модуляции (ШИМ-каналов).
- Arduino/Genuino Uno. ATmega328 на 16 МГц (с автоматическим сбросом), 6 входных аналоговых контактов, 14 входных/выходных цифровых контактов и 6 ШИМ-каналов.
- Arduino Diecimilia или Duemilanove с ATmega168. ATmega168 на 16 МГц (с автоматическим сбросом).
- Arduino Nano с ATmega328. ATmega328 на 16 МГц (с автоматическим сбросом), 8 входных аналоговых контактов.
- Arduino/Genuino Mega 2560. ATmega2560 на 16 МГц (с автоматическим сбросом), 16 входных аналоговых контактов, 54 входных/выходных цифровых контакта и 15 ШИМ-каналов.
- Arduino Mega. ATmega1280 на 16 МГц (с автоматическим сбросом), 16 входных аналоговых контактов, 54 входных/выходных цифровых контакта и 15 ШИМ-каналов.
- Arduino Mega ADK. ATmega2560 на 16 МГц (с автоматическим сбросом), 16 входных аналоговых контактов, 54 входных/выходных цифровых контакта и 15 ШИМ-каналов.
- Arduino Leonardo. ATmega32u4 на 16 Мгц (с автоматическим сбросом), 12 входных аналоговых контактов, 20 входных/выходных цифровых контактов и 7 ШИМ-каналов.
- Arduino Micro. ATmega32u4 на 16 Мгц (с автоматическим сбросом), 12 входных аналоговых контактов, 20 входных/выходных цифровых контактов и 7 ШИМ-каналов.
- Arduino Esplora. ATmega32u4 на 16 Мгц (с автоматическим сбросом).
- Arduino Mini с ATmega328. ATmega328 на 16 МГц (с автоматическим сбросом), 8 входных аналоговых контактов, 14 входных/выходных цифровых контактов и 6 ШИМ-каналов.
- Arduino Ethernet. Эквивалент Arduino Uno с модулем Ethernet Shield. ATmega328 на 16 МГц (с автоматическим сбросом), 6 входных аналоговых контактов, 14 входных/выходных цифровых контактов и 6 ШИМ-каналов.
- Arduino Fio. ATmega328 на 8 МГц (с автоматическим сбросом). Эквивалент Arduino Pro или Pro Mini (3.3B, 8 МГц) с ATmega328, 6 входными аналоговыми контактами, 14 входными/выходными цифровыми контактами и 6 ШИМ-каналами.
- Arduino BT с ATmega328. ATmega328 на 16 МГц. Записанный загрузчик (4 Кб) включает в себя код для инициализации встроенного Bluetooth-модуля. Также имеются 6 входных аналоговых контактов, 14 входных/выходных цифровых контактов и 6 ШИМ-каналов.
- LilyPad Arduino USB. ATmega32u4 на 8 МГц (с автоматическим сбросом), 4 входных аналоговых контакта, 9 входных/выходных аналоговых контактов и 4 ШИМ-канала.
- LilyPad Arduino. ATmega168 или ATmega132 на 8 МГц (с автоматическим сбросом), 6 входных аналоговых контактов, 14 входных/выходных цифровых контактов и 6 ШИМ-каналов.
- Arduino Pro или Pro Mini (5В, 16 МГц) с ATmega328. ATmega328 на 16 МГц (с автоматическим сбросом). Эквивалент Arduino Duemilanove или Nano с ATmega328, 6 входными аналоговыми контактами, 14 входными/выходными цифровыми контактами и 6 ШИМ-каналами.
- Arduino NG (или раньше) с ATmega168. ATmega168 на 16 МГц (без автоматического сброса). Компиляция и загрузка эквивалентны Arduino Diecimila или Duemilanove с ATmega168, но записанный загрузчик имеет более долгую задержку (и при сбросе три раза моргает встроенным светодиодом на 13-ом контакте). Также имеются 6 входных аналоговых контактов, 14 входных/выходных цифровых контактов и 6 ШИМ-каналов.
- Arduino Robot Control. ATmega328 на 16 МГц (с автоматическим сбросом).
- Arduino Robot Motor. ATmega328 на 16 МГц (с автоматическим сбросом).
- Arduino Gemma. ATtiny85 на 8 МГц (с автоматическим сбросом), 1 входной аналоговый контакт, 3 входных/выходных цифровых контакта и 2 ШИМ-канала.
Инструкции по добавлению поддержки новых плат смотрите в разделе «Оборудование от сторонних разработчиков» выше.
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |