вторник, 31 мая 2016 г.

1.10. Первый взгляд на программу

Урок: 1.10. Первый взгляд на программу

Транскрибация урока: Теперь посмотрим внимательнее на тот пример из образцов, которые мы недавно загрузили в плату, пример Blink. Сначала я хочу обратить ваше внимание на то, что у любого языка программирования есть определенный набор правил, которые следует соблюдать, для того чтобы компилятор понял, что вы имели в виду. Так называемый «синтаксис». Точно так же как при написании сочинения на русском языке мы используем знаки препинания, разбиение на абзацы и прочие приемы, повышающие читабельность текста, у среды разработки, у языка программирования есть набор требований к тому, что мы пишем. Иначе просто он не поймет, о чем идет речь и не сможет в итоге создать работающий машинный код. Ну начнем с того, что в начале скетча мы видим какой-то серый текст, написанный как будто бы на обычном человеческом языке. Действительно, это так и есть. Это комментарии. Комментарии — это как минимум хороший тон при оформлении кода, а как максимум полезная для вас самих привычка. Потому что все же, даже если вы владеете языком программирования, через определенное время после написания кода вы перестанете понимать, что вы имели в виду, когда его писали. Потому полезно то, что вы кодируете, комментировать на понятном русском или английском языке. Для того чтобы компилятор не считал, что это код на языке программирования, вам нужно это каким-то образом отделить от него. Мы видим вначале один из способов создания комментариев, многострочного комментария, который начинается с символов « /* » и заканчивается символами « */ ». Все, помещенное между этими маркерами, компилятор проигнорирует, и не будет пытаться превратить в машинный код. Также есть способ сделать однострочный комментарий. Он начинается с « // », здесь мы тоже видим такую строчку. Двигаемся далее. Мы видим два раздела в программе — setup и loop. Возможно, вы уже обратили на них внимание, когда открывали пустой скетч, эта заготовка там присутствовала. Эти разделы являются неотъемлемой частью любой программы для Arduino. Если какой-то, какая-то из них будет отсутствовать, то компилятор просто скажет: «Не согласен с таким положением вещей, мне нужен setup, там, или мне нужен loop». На самом деле, это определены две функции. Об определении функции мы подробно будем говорить в следующих частях, пока что вы можете просто знать об этом. Соответственно, оба этих фрагмента описаны в соответствии с правилами определения функции. Что для нас важно сейчас? Содержание любой функции ограничено фигурными скобками. Вообще, фигурные скобки являются таким способом указать компилятору на некий законченный фрагмент программы. В данном случае, у нас это определение функции. Она начинается с открывающей фигурной скобки, завершается закрывающей фигурной скобкой. Чуть позже сегодня у нас будет другой вид фрагмента программы, где используются также фигурные скобки. Не забывайте о них и всегда следите за их парностью. То есть для каждой открывающей фигурной скобки должна быть где-то закрывающая фигурная скобка. И не забывайте о вложенности. Если у вас внутри одного фрагмента, который обрамляется фигурными скобками, появляется еще один такой же фрагмент, нужно сначала закрыть внутренние фигурные скобки, а затем — внешние. В помощь нам в данном случае выступает сама среда разработки. Если мы поставим курсор рядом с одной из скобок, как я сейчас сделал в конце setup'а, её ответная парная скобка будет подсвечена. Как мы видим, открывающая фигурная скобка подсветилась. Давайте посмотрим, что описано в разделе setup. В данном случае здесь всего одна строка, это вызов стандартной функции pinMode. Что такое «вызов функции»? Функция — это некий фрагмент кода, который отдельно описан, ему присвоено имя, и у него есть свой определенный функционал. Функция pinMode описана в стандартной библиотеке Arduino, которую мы обычно даже не видим. О ней знает среда разработки, и мы просто вызываем нужные нам стандартные функции. pinMode отвечает за то, чтобы настроить, в каком режиме будет работать определенный порт в данной программе. Дело в том, что в Arduino большинство портов могу служить как входами, так и выходами. То есть либо принимать какой-то электрический сигнал из внешнего мира, либо, наоборот, отправлять его туда. Но в каждом конкретном случае нужно определить: что же, в каком направлении будет работать данный порт. Когда мы вызываем какую-то функцию, мы можем ей передавать набор параметров, то есть каких-то уточнений насчёт того, как ей нужно сейчас работать. Именно параметры перечисляются внутри круглых скобок и отделяются друг от друга запятой. Это одно из базовых синтаксических правил, и никогда об этом не следует забывать. Что в данном случае мы передаём в функцию pinMode? Первым параметром передаётся номер pin'а, который мы хотим настроить. В данном случае это 13-й pin, потому что на нём есть встроенный светодиод. То есть, на самом деле, если мы подключим к порту номер 13 какое-то внешнее устройство, оно также будет получать, на нем также будет появляться напряжение, там может включаться светодиод, мотор или что-то, но параллельно этому будет включаться встроенный светодиод. Вторым параметром после запятой мы указываем направление работы порта. В данном случае это OUTPUT (выход). Обратите внимание на то, что это ключевое слово — OUTPUT — написано заглавными буквами. Попытка написать его маленькими, строчными буквами не приведёт вас к успеху, потому что компилятор не поймет, о чём идёт речь. Ещё обратите внимание на важнейший знак препинания — точка с запятой. Пока что просто следите за тем, есть ли в приведённых примерах точка с запятой в конце строки. Если она есть, обязательно ставьте в своём коде. Если её нет, ставить точку с запятой не нужно. Впоследствии вы поймёте, когда она нужна, когда она не нужна. Посмотрим, что у нас описано в loop'е. Здесь мы видим какие-то ещё вызовы функций. Тоже стандартные функции, определённые в библиотеке Arduino, и первая из них — это digitalWrite. В качестве параметров она принимает две вещи. Первая — это номер контакта, с которым мы сейчас работаем. И состояние, в которое его нужно привести. После выполнения данной функции на 13-м контакте будет включен высокий уровень напряжения. «Высокий» в данном контексте значит, что это напряжения питания 5 Вольт. Следующая стандартная функция — delay. Она служит для того, чтобы контроллер не выполнял никаких действий в течение определённого времени. И именно это время мы передаём ей в качестве параметра. 1000 миллисекунд, то есть 1 секунда. Итого получается, что мы включили напряжение на 13-м контакте, а поскольку там есть светодиод, он зажёгся. И затем на протяжении 1000 миллисекунд, 1 секунды, ничего не происходит. После этого мы вновь вызываем digitalWrite. Вновь говорим ей работать с 13-м контактом. Но на этот раз ей следует подать низкий уровень напряжения, low. То есть 0 Воль — выключить. И снова подождать 1 секунду. После этого loop начнет выполняться с начала, и получится, что мы видим бесконечный цикл мигания светодиода. Секунду он включен, вместе с 13-м контактом, секунду — выключен. Отдельно хочу обратить ваше внимание на параметры, которые мы передали в функцию delay. 1000 миллисекунд. В данном случае мы использовали числовую константу, то есть буквально написали число. На самом деле, в данном месте мы могли использовать любое выражение. «Выражение» в программировании — это такая вещь, которая... это что-то, что может быть вычислено. То есть 1000 вычислять не нужно, мы буквально уже написали «1000». Это может быть арифметическое выражение, например: 1000 разделить на 3. Это может быть вычислено, будет получен результат 333 и 3 в периоде. Это может быть использование какого-то значения, хранящегося в памяти. Об этом мы поговорим чуть позже. Давайте подытожим, что мы выяснили благодаря этому простому примеру. Во-первых, мы теперь знаем, что в любой программе для Arduino есть обязательно раздел setup и loop, которые на самом деле являются определениями функции. Причем setup — такой фрагмент, который выполняется единожды при запуске контроллера, то есть обычно там просиходят какие-то настройки. Как, например, сейчас, мы 13-й pin сделали выходом. А loop, в отличие от него, после своего первого выполнения выполнится вновь и вновь, и вновь. В данном случае мы включаем 13-й контакт, где есть светодиод, ждем секунду, выключаем 13-й контакт, снова ждём секунду. И в бесконечном цикле получаем мигание светодиода. Теперь, наконец, мы можем приступать к программированию светофора.

Часть: Видео

Модуль: Один старый и много новых знакомых

Описание модуля: Добро пожаловать! На этой неделе вас ждет введение в курс (обязательно ознакомьтесь с ним), а затем начало работы: знакомство с Arduino, средой разработки и первыми компонентами. Вы научитесь собирать схемы на макетке, напишете первую программу и получите первое готовое устройство. Не забывайте про важнейший раздел "Сделайте сами"!

Курс: Строим роботов и другие устройства на Arduino. От светофора до 3D-принтера

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

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

Пройдя этот курс, вы сможете создавать устройства, которые считывают данные о внешнем мире с разнообразных датчиков, обрабатывают информацию, получают и отправляют данные на ПК, в Интернет, на мобильные устройства, управляют индикацией и движением. Создание устройств будет включать проектирование, изучение компонентов, сборку схем, написание программ, диагностику. Попутно с созданием самих устройств вы сделаете визуализацию на ПК, создадите веб-страницу, которую будет демонстрировать одно из ваших устройств, а также разберетесь с устройством и работой FDM 3D-принтера.

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

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

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

Программа:
  • Неделя 1 Один старый и много новых знакомых
  • Неделя 2 Контроллер изучает мир
  • Неделя 3 Цель обнаружена
  • Неделя 4 Как полить цветок из другого города
  • Неделя 5 Мобильный робот
  • Неделя 6 Как создать новый предмет за час
Преподаватель: Алексей Перепелкин (1), Дмитрий Савицкий (2)

Описание преподавателя: (1) Алексей Перепёлкин занимается развитием робототехники на базе ЛИОТ МФТИ. В 2012 году открыл для себя новое захватывающее чувство – когда устройство, которое сам построил и запрограммировал, работает. Свернул с финансовой дорожки и создал кружок робототехники для подростков. Готовил их к соревнованиям. Стал посещать конференции, а затем проводил мастер-классы для тех, кто тоже хочет организовать занятия. Совместно с коллегами в 2013 году разработал новые соревнования – Робопрофи – для конкурса Робот для жизни и провел их. В 2014 году впервые провел Arduino-номинацию на фестивале Робофест, а для российского финала Russian Robot Olympiad 2014 сделал творческую категорию. С тех пор эти соревнования стали регулярными. Летом 2014 провел двухнедельную мастерскую в детском лагере Никола-Ленивца, а затем преподавал в выездной школе, посвященной программированию и робототехнике, которую провели ABBYY и Яндекс. В 2015 году стал руководителем направления робототехники в GoTo Camp, выездных школах, где участники создали десятки проектов, от прототипов умных домов и операторских тележек до робота-бубниста и принтера для незрячих. В 2014 году с коллегами начал проект Роболабы: мероприятия для школьников и студентов, где участники параллельно решают усложненные задачи, а затем проводят рефлексию сделанной работы и оценивают чужие в ходе серии мероприятий.

(2) Физик, научный сотрудник, выпускник МФТИ. Запустил кружок робототехники в 2011 году. Рассказал Алексею Перепелкину о том, как здорово вести кружок робототехники. Рассказал об этом еще целому ряду людей. Побеждал со своими командами на соревнованиях. Проводил проектную работу с участниками исследовательской выездной школы МКШ с 2013 года, где руководил реализацией физических и робототехнических проектов, например, «Вслед за солнцем», в котором изучалась эффективность динамической ориентации солнечных батарей на солнце. Вместе с коллегами разрабатывал и был судьей Робопрофи. Участвовал в подготовке проекта Роболабы. Вновь пришел в МФТИ для проведения факультативного курса «Основы создания киберфизических устройств»

Организатор: Лаборатория инновационных образовательных технологий МФТИ (1), Лаборатория инновационных образовательных технологий МФТИ (2)

Описание организатора: (2) Московский физико-технический институт (неофициально известный как МФТИ или Физтех) является одним из самых престижных в мире учебных и научно-исследовательских институтов. Он готовит высококвалифицированных специалистов в области теоретической и прикладной физики, прикладной математики, информатики, биотехнологии и смежных дисциплин. Физтех был основан в 1951 году Нобелевской премии лауреатами Петром Капицей, Николаем Семеновым, Левом Ландау и Сергеем Христиановичем. Основой образования в МФТИ является уникальная «система Физтеха»: кропотливое воспитание и отбор самых талантливых абитуриентов, фундаментальное образование высшего класса и раннее вовлечение студентов в реальную научно-исследовательскую работу. Среди выпускников МФТИ есть Нобелевские лауреаты, основатели всемирно известных компаний, известные космонавты, изобретатели, инженеры.

Категория: Компьютерные науки

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

Тематика: Разработка ПО

Материал: