Описание основных функций языка arduino. Arduino — основы программирования. Зачем нужны языки программирования

Для Андроид 25.02.2019
Для Андроид

У американцев и европейцев, живущих в Японии, есть высказывание: «Если задался целью слетать когда-нибудь на Марс, начни с Японии». Попасть в эту страну считается едва ли не труднее.

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

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

1.Как уехать работать в Японию?
Чтобы уехать работать в Японию, необходимо иметь диплом. Из института. Можно купленный, не суть важно - главное, чтоб, когда перевод на японский делать будешь, нотариус заверил.
Если диплома нет, надо переходить к опции номер два - ехать учиться в Японию.
Однако предположим, что диплом есть. Теперь самое главное - это найти работу.
Найти работу в Японии человеку, который не владеет никаким другим языком, кроме русского, или «говорит со словарем» - практически нереально. Да и сама идея какая-то кривая, вы не находите? В Японии никто не говорит по-русски, как вы жить собираетесь?
Поговаривают, будто бы в Японию легко можно уехать «танцовщицей» - так вот, я категорически против этого действа. По многим причинам. Если вы не знаете по каким, и хотите так поехать, спросите у своих родителей, или свою учительницу русского языка, что они об этом думают, я думаю они не ошибутся, назвав вещи своими именами.


Так вот.
Чтобы найти работу в Японии, совершенно необходимо владеть японским или хотя бы английским языком. Когда вы выучите эти языки, можно просто набрать в гугле словосочетание Работа в Японии и ознакомиться с положением на рабочем рынке Японии. Далее, соответственно, начать рассылать резюме и ждать ответа. Когда придет положительный ответ, можно вздохнуть с облегчением - обо всем позаботится работодатель. Должен позаботиться. Если не заботится, шлите его нафиг - он мухлюет.
Ну и так, просто для справки: таким образом проще всего уехать, если ты программист с опытом работы.
Если диплом есть, а знания языка нет, и как-то не предвидится (или же опыта работы не хватает - резюме посылаете, а ответов все нет), то есть и другая опция, наиболее популярная:

2.Как уехать учиться в Японию?
Уехать учиться в Японию можно в несколько учреждений: в японскую языковую школу, в институт (как первое, так и второе высшее) и в школу подготовки к институту. Если вы хотите уехать учиться в институт, вам необходимо знать японский язык: все обучение проводится на нем. Если вы знаете японский язык, я вас поздравляю - вся информация о том, как поступить в японский вуз, доступна в сети на японском языке в огромных количествах. Многие также уезжают по обмену из родного вуза - обратитесь в соответствующий кабинет.
Чаще всего едут в языковую школу.


Школа японского языка.
Это такое место, где куча иностранцев все вместе под предводительством японцев учат японский язык. Скорость обучения не ахти какая (то есть за три месяца вы с трудом выучитесь говорить «как пройти в библиотеку»), круг общения ограничен (так как весь класс - иностранцы)., А УПРАВЛЕНИЕ УСЛОВИЯ проживания тянут на среднюю российскую общагу.

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

Вот такие варианты есть у тех, кто хочет пожить в Японии.

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

Существует мнение, согласно которому Япония - просто рай для программиста, и его с руками и ногами возьмут практически в любую компанию, сразу выдав визу лет на 5. А что на практике?

  • Как найти работу программисту в Японии?
  • И вообще, сложно ли это?
  • Какие нюансы могут подстерегать иностранца, который планирует трудоустройство?

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

Никита, когда ты заметил, что увлечение Японией перешло в более осознанное желание - приехать сюда?

Лет 8 назад я стал увлекаться аниме и японской поп-культурой. Тогда я учился в университете, и явных планов куда-то ехать уж точно не было. После окончания ВУЗа появилось больше свободного времени, и я стал изучать японский язык просто для себя. Через пару-тройку месяцев что-то даже начало получаться, и мне захотелось съездить в Японию, чтобы самому попробовать пообщаться, послушать, как говорят местные. Думал, просто поеду на 2-3 недели. В Санкт-Петербурге к тому времени у меня уже была стабильная работа в IT-компании. Я стал искать информацию, как можно съездить в Японию ненадолго, и нашел сайт . Оказалось, что организовать поездку проще, чем кажется.

В 2013 году я первый раз поехал в Японию и 1 месяц проучился в Интеркультуре. Понял, что моих минимальных знаний японского и английского прекрасно хватает для того чтобы здесь жить и путешествовать по стране. Ориентироваться в Японии очень легко, даже не имея особых знаний. Потом я вернулся в Россию и решил, что месяца мне мало - нужно ехать подольше. Но в этом случае надо увольняться - я понимал, что даже на 2-3 месяца меня бы явно не отпустили. А если увольняться, то тогда уже и ехать на больший срок - например, на 1 год. В общем, я так и сделал. Практически никому не говорил о своем решении, больше откладывал денег, меньше тратил… Попутно не забывал учить японский, потому что понимал: у меня будет в Японии всего 1 год, и лучше сразу приехать туда с нормальным уровнем, чтобы усвоение материала прошло быстрее. Из-за кризиса в 2014 году мои накопления стали стремительно таять, и пришлось поездку немного отложить. В результате, приехал я в октябре 2015 года.

Почему ты выбрал Интеркультуру?

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

Прежде всего, тем, кто настроен быстро усвоить материал и получить максимум знаний. В Интеркультуре всего за 1 год вас могут дотянуть с начального уровня до N2. Второй год уже идет детальная подготовка к N1. Также здесь отличные уроки по экзамену Нихон Рюгаку Сикэн, который нужен для поступления в ВУЗ. И, конечно, курс по трудоустройству, который точно пригодится тем, кто планирует работать в японской компании.

У тебя были мысли остаться здесь больше, чем на 1 год?

Остаться надолго? Нет, я думал, что никогда не смогу жить тут один среди этой странной культуры и людей. Но потом познакомился с другими русскоговорящими студентами. Все говорили: «Да зачем возвращаться, если здесь так здорово!». В общем, решил остаться. Тем более все равно понял, что за 1 год выучить японский до нужного мне уровня все равно не получится, и мне придется здесь задержаться. К тому же, я уже привык к таким плюсам Японии, как безопасность, вежливость, да и попутешествовать по стране еще не успел толком.

Когда ты приехал в Интеркультуру, то только учился или в свободное время подрабатывал?

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

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

Какие требования предъявляют к программистам в Японии?

Если честно, везде очень по-разному, начиная от простого интереса к IT-сфере, заканчивая знаниями в области web-разработки и мобильных платформ. Программирование - вещь примерно одинаковая везде, что в России, что в Японии. В общем, я получил приглашение где-то на 8 собеседований и даже под все это дело купил костюм. Помню, что было невыносимо жарко - бегать по улицам в июне. Хотя это я просто не знал еще о кошмаре, который ждет всех нас в августе (смеется) .

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

Вторая проблема - мой японский. Я плохо тогда говорил, плюс еще и нервничал. Объясняли, что уровень пока низковат - долго и сложно ставить задачи. Интересно, что все остальное работодателей устраивало. У меня был опыт работы в сфере программирования более 5 лет. Тестовые задания я вообще решил быстро - они были легкими, как будто составленными для выпускника университета, который раньше нигде и никогда не работал.

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

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

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

Ты ведь программист. Почему не стал работать удаленно?

В России у меня не было подобного опыта, и начинать уже что-то в Японии казалось бессмысленным. Я бы так дальше и не работал, но тут у меня банально закончились деньги, и я очень резко это понял (смеется). Я немного ошибся в своих расчетах, в результате чего выяснилось, что у меня не хватает 100 000 иен, и если я не покрою их в течение трех месяцев… В общем, следующие 2 дня я только и занимался тем, что искал байто.

Отказывали много где. Сначала из-за графика, потому что я был привязан к школьному расписанию. Потом не брали на подработку, потому что виза заканчивалась через 6 месяцев, и это почему-то многих настораживало. Как я ни объяснял, что школа потом эту визу поможет продлить, разговор все равно прекращался. Мне повезло, что в семейном ресторане «Сайзерия» никаких строгих требований не было, и я практически сразу стал подрабатывать. Платили 960 иен в час. Было тяжело: с учебы бежать на байто и там проводить по 5 часов на ногах. Я там проработал месяца 4. Конечно, при таком ритме повторять подвиг с моими походами на собеседование уже не хотелось. Я отложил этот вопрос и тогда же поступил на курс по трудоустройству , где преподавал Сасаки-сенсей. После этого появилась какая-то уверенность в себе. Я понял, что у меня знаний более-менее достаточно для того чтобы искать работу.

Кстати, мой пример очень показателен в плане того, как можно долго промучиться и ничего не найти. Я как-то сразу стал смотреть вакансии только от японских компаний и совершенно забыл о том, что в международные организации устроиться проще! А тут мой знакомый получил работу программиста именно в такой компании. И вот, он мне говорит: «Попробуй и ты туда тоже прийти на собеседование». Он буквально за полтора месяца не только работу нашел, но также визу получил и визитку менеджера по набору персонала мне принес. Я на нее посмотрел и как-то вдохновился.

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

Ты сразу понял, что тебя возьмут на работу?

Догадывался. Думал, что когда узнаю, то буду так радоваться! Но ответ пришел как-то неожиданно быстро, и я даже не успел настроиться. Причем, мне потом позвонили и спросили, не могу ли я выйти на работу уже завтра. А у меня же байто в «Сайзерии»! Я побежал вечером к тентё, стал отпрашиваться и извиняться… Потом выяснилось, что уже и на рабочую визу документы пора подавать. В общем, все как-то быстро произошло.

Расскажи о компании. Чем ты занимаешься?

Компания называется “Play Next Japan”. Сейчас я делаю все, что говорят. Меня буквально перебрасывают из отдела в отдел, с проекта на проект. Учиться приходиться всему и сразу. Коллектив больше иностранный - японцы здесь, разве что, начальники.

Можешь сравнить работу программистом в Японии и России?

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

В чем я вижу главное отличие от работы в России, и что мне очень нравится, так это то, что здесь все делается «юккури» (медленно). Тебе дают время, чтобы ты вник в вопрос, чтобы все изучил. Программисты - вообще люди очень занятые, и им постоянно нужно изучать что-то новое. В России почему-то считается, что ты должен приходить в компанию и по умолчанию все сразу знать. Но это нереально! А в Японии это понимают и дают тебе время самому во всем разобраться.

Работать в Японии приятнее и пока что даже интереснее. Я за 2 месяца работы здесь узнал больше, чем за последние 3 года работы в России. Мне кажется, это еще и потому, что японцы любят все самое новое и современное.

Насколько ты настроен прожить в Японии всю свою жизнь?

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

Японский сейчас улучшается, хочешь ты этого или нет. То, что ты спроектировал, нужно объяснить своему начальнику, устроив мини-презентацию. И мне уже дали понять, что делать это нужно на японском языке. Для этого нужно серьезно готовиться. И кстати, делать это можно в счет рабочего времени. Работа - лучший способ улучшить японский! С арубайто даже сравнивать не стоит.

Ты можешь дать несколько советов именно тем, кто хочет работать программистом в Японии?

  • Хорошо бы еще в своей стране получить опыт, которым можно похвастаться. Пусть у вас будут 1-2 проекта, о которых можно рассказать.
  • Английский необязательно должен быть на очень высоком уровне - все равно собеседование, скорее всего, у вас будет на японском языке.
  • По своему опыту скажу, что для работы программистом достаточно бывает и уровня N3. Но будьте готовы в процессе работы язык подтягивать.
  • Больших денег сразу получать, возможно, и не будете, но перспектива повышения зарплаты будет. И очень часто она напрямую связана с уровнем японского. Здесь очень ценится, когда с клиентом встречается не только начальник компании, но и исполнитель, с которым можно обсудить нюансы работы. Это повышает уровень доверия.
  • В профессиональном плане здесь ценится разработка мобильных приложений под Android и веб-приложений на Java, PHP и Python.
  • Сфера игр немного перенасыщена специалистами. С другой стороны, это очень востребованное в Японии направление, и пробовать устроиться на работу можно.
  • Помните, что для получения рабочей визы обязателен диплом, в котором указано, что у вас инженерная специальность, а изученные предметы могут квалифицироваться как основание для работы в сфере IT.
  • Что делать, если диплома нет? В Японии можно сдать государственный экзамен IT Passport, который позволяет подтвердить свою специальность, например, если у вас уже есть опыт работы в сфере программирования. Но готовиться к нему надо долго, и человек должен быть действительно невероятно крут в японском, чтобы читать задания быстро. Неплохо готовят к сдаче этого экзамена в компьютерных колледжах. Правда, идти туда нужно, понимая, что именно знаний для будущей работы вы много не получите - японцы все же думают, что выпускника колледжа всему научит компания.

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

Исторически так сложилось, что программная часть Arduino состоит из интегрированной программной среды (IDE), позволяющей писать, компилировать, а также загружать написанный код в аппаратную часть. Cреда ArduinoIDE, и сам язык Wiring основаны, в первую очередь, на Processing, косвенно – на С/C++. По сути, Arduino IDE являет собой большую сборную солянку, не смеха ради, а удобства для.

Даже внешне и Arduino IDE и Processing похожи


Из чего состоит программа (скетч)?
Каждая программа, какой сложной она не казалась бы, состоит из отдельных наборов блоков кода, который обозначается фигурными скобками {} . Для минимальной программы требуется всего 2 блока: setup и loop . Их присутствие обязательно в любой программе на C++ для Arduino, иначе на стадии компиляции можно получить ошибку.
void setup() { } void loop() { }
В функции setup() происходят начальные установки переменных, регистров. После завершения setup() управление переходит к функции loop() , которая являет собой бесконечный цикл, записанный в теле (между { } ). Именно эти команды и совершают все алгоритмические действия контроллера.

Аппаратный « Hello , world !» - мигание светодиодом.
То, с чего начинается первое знакомство с Arduino на стыке программной и аппаратной части - это мигание светодиодом.


Сперва необходимо дополнить минимальную программу. У Arduino (например UNO), к 12 пину и GND подключим светодиод (цвет самого светодиода выбирается из личных предпочтений).

Void setup() { pinMode(12, OUTPUT); } void loop() { digitalWrite(12, HIGH); delay(100); digitalWrite(12, LOW); delay(900); }
Делаем Ctrl+C -> Ctrl+V, компилируем, загружаем, властвуем. Видим светопредставление, длящееся не более секунды. Разбираемся, почему происходит именно так.

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

Что же происходит между { } ?
Как известно, пины Arduino могут работать как на выход так и на вход. Когда мы хотим чем-то управлять, то нам нужно перевести управляющий пин в состояние работы на выход. Это делается выражением в функции setup :
pinMode(12, OUTPUT); В данной ситуации в выражении осуществляется вызов функции . В pinMode устанавливается заданный по номеру пин в заданный режим (INPUT или OUTPUT). О каком пине и о каком режиме идёт речь, указывается в круглых скобках, через запятую. В нашем случае мы хотим, чтобы 12-й пин работал как выход. OUTPUT означает выход, INPUT - вход. Уточняющие значения, такие как 12 и OUTPUT называются аргументами функции . Сколько у функции аргументов зависит от сути функции и воли ее создателя. Функции могут быть без аргументов вовсе, как это происходит на примере setup и loop.

Далее переходим к блоку loop, по порядку:
-вызов встроенной функции digitalWrite. Она предназначена для подачи на заданный пин логического нуля (LOW, 0 вольт) или логической единицы (HIGH, 5 вольт) В функцию digitalWrite передаётся 2 аргумента: номер пина и логическое значение.
-вызов функции delay. Это, опять же, встроенная функция, которая заставляет процессор «уснуть» на определённое время. Она принимает всего один аргумент: время в миллисекундах, которое следует спать. В нашем случае это 100 мс. Как только 100 мс истекают, процессор просыпается и тут же переходит к следующему выражению.
- вызов встроенной функции digitalWrite. Только на этот раз вторым аргументом является LOW. То есть устанавливаем на 12-м пине логический ноль -> подаём 0 вольт -> гасим светодиод.
- вызов функции delay. На этот раз «спим» чуть подольше – 900 мс.

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

Вместо заключения, немного о чистоте.
На самом деле все пробелы, переносы строк, символы табуляции не имеют большого значения для компилятора. Там, где стоит пробел, может быть перенос строки и наоборот. На самом деле 10 пробелов подряд, 2 переноса строки и ещё 5 пробелов - это всё эквивалент одного пробела.


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

void setup() { pinMode(12, OUTPUT); } void loop () { digitalWrite(12,HIGH); delay(100) ; digitalWrite(12,LOW); delay(900); }

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


1. Всегда, при начале нового блока между { и } увеличивайте отступ. Обычно используют 2 или 4 пробела. Выберите одно из значений и придерживайтесь его всюду.

Void loop() { digitalWrite(12, HIGH); delay(100); digitalWrite(12, LOW); delay(900); }
2. Как и в обычном языке: ставьте пробел после запятых.

digitalWrite(12, HIGH);
3. Размещайте символ начала блока { на новой строке на текущем уровне отступа или в конце предыдущей. А символ конца блока } на отдельной строке на текущем уровне отступа:

void setup() { pinMode(12, OUTPUT); } void setup() { pinMode(12, OUTPUT); }
4. Используйте пустые строки для разделения смысловых блоков:

void loop() { digitalWrite(12, HIGH); delay(100); digitalWrite(12, LOW); delay(900); digitalWrite(12, HIGH); delay(100); digitalWrite(12, LOW); delay(900); }
5. Для того, чтобы Ваше детище было приятно читать существуют так называемые комментарии. Это конструкции в программном коде, которые полностью игнорируются компилятором и имеют значение только для того, кто это читает. Комментарии могут быть многострочными или однострочными:

/* это многострочный комментарий */ // это однострочный

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

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

Что такое Arduino и для чего оно нужно?

Arduino — это электронный конструктор, который позволяет любому человеку создавать разнообразные электро-механические устройства. Ардуино состоит из программной и аппаратной части. Программная часть включает в себя среду разработки (программа для написания и отладки прошивок), множество готовых и удобных библиотек, упрощенный язык программирования. Аппаратная часть включает в себя большую линейку микроконтроллеров и готовых модулей для них. Благодаря этому, работать с Arduino очень просто!

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

Стартовый набор Arduino

Для того что бы начать изучать Arduino необходимо обзавестись самой платой микроконтроллера и дополнительными деталями. Лучше всего приобрести стартовый набор Ардуино, но можно и самостоятельно подобрать все необходимое. Я советую выбрать набор, потому что это проще и зачастую дешевле. Вот ссылки на лучшие наборы и на отдельные детали, которые обязательно пригодятся вам для изучения:

Базовый набор ардуино для начинающих: Купить
Большой набор для обучения и первых проектов: Купить
Набор дополнительных датчиков и модулей: Купить
Ардуино Уно самая базовая и удобная модель из линейки: Купить
Беспаечная макетная плата для удобного обучения и прототипирования: Купить
Набор проводов с удобными коннекторами: Купить
Комплект светодиодов: Купить
Комплект резисторов: Купить
Кнопки: Купить
Потенциометры: Купить

Среда разработки Arduino IDE

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

Версия Windows Mac OS X Linux
1.8.2

Язык программирования Ардуино

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

Для программирования Arduino используется упрощенная версия языка C++ с предопределенными функциями. Как и в других Cи-подобных языках программирования есть ряд правил написания кода. Вот самые базовые из них:

  • После каждой инструкции необходимо ставить знак точки с запятой (;)
  • Перед объявлением функции необходимо указать тип данных, возвращаемый функцией или void если функция не возвращает значение.
  • Так же необходимо указывать тип данных перед объявлением переменной.
  • Комментарии обозначаются: // Строчный и /* блочный */

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

Все прошивки для Arduino должны содержать минимум 2 функции. Это setup() и loop().

Функция setup

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

// переменные с пинами подключенных устройств int switchPin = 8; int ledPin = 11; // переменные для хранения состояния кнопки и светодиода boolean lastButton = LOW; boolean currentButton = LOW; boolean ledOn = false; void setup() { pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); } // функция для подавления дребезга boolean debounse(boolean last) { boolean current = digitalRead(switchPin); if(last != current) { delay(5); current = digitalRead(switchPin); } return current; } void loop() { currentButton = debounse(lastButton); if(lastButton == LOW && currentButton == HIGH) { ledOn = !ledOn; } lastButton = currentButton; digitalWrite(ledPin, ledOn); }

// переменные с пинами подключенных устройств

int switchPin = 8 ;

int ledPin = 11 ;

// переменные для хранения состояния кнопки и светодиода

boolean lastButton = LOW ;

boolean currentButton = LOW ;

boolean ledOn = false ;

void setup () {

pinMode (switchPin , INPUT ) ;

pinMode (ledPin , OUTPUT ) ;

// функция для подавления дребезга

boolean debounse (boolean last ) {

boolean current = digitalRead (switchPin ) ;

if (last != current ) {

delay (5 ) ;

current = digitalRead (switchPin ) ;

return current ;

void loop () {

currentButton = debounse (lastButton ) ;

if (lastButton == LOW && currentButton == HIGH ) {

ledOn = ! ledOn ;

lastButton = currentButton ;

digitalWrite (ledPin , ledOn ) ;

В этом скетче я создал дополнительную функцию debounse для подавления дребезга контактов. О дребезге контактов есть на моем сайте. Обязательно ознакомьтесь с этим материалом.

ШИМ Arduino

Широтно-импульсная модуляция (ШИМ) — это процесс управления напряжением за счет скважности сигнала. То есть используя ШИМ мы можем плавно управлять нагрузкой. Например можно плавно изменять яркость светодиода, но это изменение яркости получается не за счет уменьшения напряжения, а за счет увеличения интервалов низкого сигнала. Принцип действия ШИМ показан на этой схеме:

Когда мы подаем ШИМ на светодиод, то он начинает быстро зажигаться и гаснуть. Человеческий глаз не способен увидеть это, так как частота слишком высока. Но при съемке на видео вы скорее всего увидите моменты когда светодиод не горит. Это случится при условии что частота кадров камеры не будет кратна частоте ШИМ.

В Arduino есть встроенный широтно-импульсный модулятор. Использовать ШИМ можно только на тех пинах, которые поддерживаются микроконтроллером. Например Arduino Uno и Nano имеют по 6 ШИМ выводов: это пины D3, D5, D6, D9, D10 и D11. В других платах пины могут отличаться. Вы можете найти описание интересующей вас платы в

Для использования ШИМ в Arduino есть функция Она принимает в качестве аргументов номер пина и значение ШИМ от 0 до 255. 0 — это 0% заполнения высоким сигналом, а 255 это 100%. Давайте для примера напишем простой скетч. Сделаем так, что бы светодиод плавно загорался, ждал одну секунду и так же плавно угасал и так до бесконечности. Вот пример использования этой функции:

// Светодиод подключен к 11 пину int ledPin = 11; void setup() { pinMode(ledPin, OUTPUT); } void loop() { for (int i = 0; i < 255; i++) { analogWrite(ledPin, i); delay(5); } delay(1000); for (int i = 255; i > 0; i--) { analogWrite(ledPin, i); delay(5); } }

// Светодиод подключен к 11 пину

int ledPin = 11 ;

void setup () {

pinMode (ledPin , OUTPUT ) ;

void loop () {

for (int i = 0 ; i < 255 ; i ++ ) {

analogWrite (ledPin , i ) ;

delay (5 ) ;

delay (1000 ) ;

for (int i = 255 ; i > 0 ; i -- ) {

Введение

Freeduino/Arduino программируется на специальном языке программирования – он основан на C/C ++, и позволяет использовать любые его функции. Строго говоря, отдельного языка Arduino не существует, как и не существует компилятора Arduino – написанные программы преобразуются (с минимальными изменениям) в программу на языке C/C++, и затем компилируются компилятором AVR-GCC. Так что фактически, используется специализированный для микроконтроллеров AVR вариант C/C++.

Разница заключается в том, что Вы получаете простую среду разработки, и набор базовых библиотек, упрощающих доступ к находящейся «на борту» микроконтроллера периферии.

Согласитесь, очень удобно начать работу с последовательным портом на скорости 9600 бит в секунду, сделав вызов одной строчкой:

Serial.begin(9600);

А при использовании «голого» C/C++ Вам бы пришлось разбираться с документацией на микроконтроллер, и вызывать нечто подобное:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Здесь кратко рассмотрены основные функции и особенности программирования Arduino. Если Вы не знакомы с синтаксисом языков C/C++, советуем обратиться к любой литературе по данному вопросу, либо Internet-источникам.

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

Более полная документация (на английском языке) представлена на официальном сайте проекта – http://www.arduino.cc . Там же есть форум, ссылки на дополнительные библиотеки и их описание.

По аналогии с описанием на официальном сайте проекта Arduino, под «портом» понимается контакт микроконтроллера, выведенный на разъем под соответствующим номером. Кроме того, существует порт последовательной передачи данных (COM-порт).

Структура программы

В своей программе Вы должны объявить две основных функции: setup() и loop().

Функция setup() вызывается один раз, после каждого включения питания или сброса платы Freeduino. Используйте её, чтобы инициализировать переменные, установить режимы работы цифровых портов и т.д.

Функция loop() последовательно раз за разом исполняет команды, которые описаны в ее теле. Т.е. после завершения функции снова произойдет ее вызов.

Разберем простой пример:

void setup() // начальные установки
{
beginSerial(9600); // установка скорости работы серийного порта на 9600 бит/сек
pinMode(3, INPUT); // установка 3-его порта на ввод данных
}

// Программа проверяет 3-ий порт на наличие на нём сигнала и посылает ответ в
// виде текстового сообщения на последовательный порт компьютера
void loop() // тело программы
{
if (digitalRead(3) == HIGH) // условие на опрос 3го порта
serialWrite("H"); // отправка сообщения в виде буквы «Н» на COM-порт
else
serialWrite("L"); // отправка сообщения в виде буквы «L» на COM-порт
delay(1000); // задержка 1 сек.
}

pinMode (порт, режим);

Описание:

Конфигурирует указанный порт на ввод или вывод сигнала.

Параметры:

порт – номер порта, режим которого Вы желает установить (значение целого типа от 0 до 13).

режим – либо INPUT (ввод) либо OUTPUT (вывод).

pinMode(13, OUTPUT); //13й вывод будет выходом
pinMode(12, INPUT); //а 12й – входом

Примечание:

Аналоговые входы могут использоваться как цифровые входы/выходы, при обращении к ним по номерам с 14 (аналоговый вход 0) по 19 (аналоговый вход 5)

digitalWrite(порт, значение);

Описание:

Устанавливает высокий (HIGH) или низкий (LOW) уровень напряжения на указанном порте.

Параметры:

порт: номер порта

значение: HIGH или LOW

digitalWrite(13, HIGH); // выставляем 13й вывод в «высокое» состояние

value = digitalRead (порт);

Описание:

Считывает значение на указанном порту

Параметры:

порт: номер опрашиваемого порта

Возвращаемое значение: возвращает текущее значение на порту (HIGH или LOW) типа int

int val;
val = digitalRead(12); // опрашиваем 12й вывод

Примечание:

Если к считываемому порту ничего не подключено, то функция digitalRead () может беспорядочно возвращать значения HIGH или LOW.

Аналоговый ввод/вывод сигнала

value = analogRead(порт);

Описание:

Считывает значение с указанного аналогового порта. Freeduino содержит 6 каналов, аналого-цифрового преобразователя на 10 битов каждый. Это означает, что входное напряжения от 0 до 5В преобразовывается в целочисленное значение от 0 до 1023. Разрешающая способность считывания составляет: 5 В/1024 значений = 0,004883 В/значение (4,883 мВ). Требуется приблизительно 100 нС (0.0001 С), чтобы считать значение аналогового ввода, так что максимальная скорость считывания - приблизительно 10000 раз в секунду.

Параметры:

Возвращаемое значение: возвращает число типа int в диапазоне от 0 до 1023, считанное с указанного порта.

int val;
val = analogRead(0); // считываем значение на 0м аналоговом входе

Примечание:

Аналоговые порты по умолчанию определенны на ввод сигнала и в отличие от цифровых портов их не требуется конфигурировать с помощью вызова функции pinMode.

analogWrite(порт, значение);

Описание:

Выводит на порт аналоговое значение. Эта функция работает на: 3, 5, 6, 9, 10, и 11 цифровых портах Freeduino.

Может применяться для изменения яркости светодиода, для управления двигателем и т.д. После вызова функции analogWrite, соответствующий порт начинает работать в режиме широтно-импульсного модулирования напряжения до тех пор, пока не будет следующего вызова функции analogWrite (или функций digitalRead / digitalWrite на том же самом порте).

Параметры:

порт: номер опрашиваемого аналогового входа

значение: целочисленное между 0 и 255. Значение 0 генерирует 0 В на указанном порте; значение 255 генерирует +5 В на указанном порте. Для значений между 0 и 255, порт начинает быстро чередовать уровень напряжения 0 и +5 В - чем выше значение, тем, более часто порт генерирует уровень HIGH (5 В).

analogWrite(9, 128);// устанавливаем на 9 контакте значение эквивалентное 2,5В

Примечание:

Нет необходимости вызвать функцию pinMode, чтобы установить порт на вывод сигналов перед вызовом функции analogWrite.

Частота генерирования сигнала – приблизительно 490 Гц.

time = millis();

Описание:

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

Возвращаемое значение: возвращает значение типа unsigned long

unsigned long time; // объявление переменной time типа unsigned long
time = millis(); // передача количества миллисекунд

delay(время_мс);

Описание:

Приостанавливает программу на заданное число миллисекунд.

Параметры:

время_мс – время задержки программы в миллисекундах

delay(1000); //пауза 1 секунда

delayMicroseconds

delayMicroseconds(время_мкс);

Описание:

Приостанавливает программу на заданное число микросекунд.

Параметры:

время_мкс – время задержки программы в микросекундах

delayMicroseconds(500); //пауза 500 микросекунд

pulseIn(порт, значение);

Описание:

Считывает импульс (высокий или низкий) c цифрового порта и возвращает продолжительность импульса в микросекундах.

Например, если параметр «значение» при вызове функции установлен в HIGH, то pulseIn() ожидает, когда на порт поступит высокий уровень сигнала. С момента его поступления начинается отсчет времени до тех пор, пока на порт не поступит низкий уровень сигнала. Функция возвращает длину импульса (высокого уровня) в микросекундах. Работает с импульсами от 10 микросекунд до 3 минут. Обратите внимание, что эта функция не будет возвращать результат, пока импульс не будет обнаружен.

Параметры:

порт: номер порта, с которого считываем импульс

значение: тип импульса HIGH или LOW

Возвращаемое значение: возвращает длительность импульса в микросекундах (тип int)

int duration; // объявление переменной duration типа int
duration = pulseIn(pin, HIGH); // измеряем длительность импульса

Последовательная передача данных

Freeduino имеет встроенный контроллер для последовательной передачи данных, который может использоваться как для связи между Freeduino/Arduino устройствами, так и для связи с компьютером. На компьютере соответствующее соединение представлено USB COM-портом.

Связь происходит по цифровым портам 0 и 1, и поэтому Вы не сможете использовать их для цифрового ввода/вывода если используете функции последовательной передачи данных.

Serial.begin(скорость_передачи);

Описание:

Устанавливает скорость передачи информации COM порта битах в секунду для последовательной передачи данных. Для того чтобы поддерживать связь с компьютером, используйте одну из этих нормированных скоростей: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, или 115200. Также Вы можете определить другие скорости при связи с другим микроконтроллером по портам 0 и 1.

Параметры:

скорость_передачи: скорость потока данных в битах в секунду.

Serial.begin(9600); //устанавливаем скорость 9600 бит/сек

Serial.available

count = Serial.available();

Описание:

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

Возвращаемое значение:

Возвращает значение типа int – количество байт, доступных для чтения, в последовательном буфере, или 0, если ничего не доступно.

if (Serial.available() > 0) { // Если в буфере есть данные
// здесь должен быть прием и обработка данных
}

char = Serial.read();

Описание:

Считывает следующий байт из буфера последовательного порта.

Возвращаемое значение:

Первый доступный байт входящих данных с последовательного порта, или -1 если нет входящих данных.

incomingByte = Serial.read(); // читаем байт

Описание:

Очищает входной буфер последовательного порта. Находящиеся в буфере данные теряются, и дальнейшие вызовы Serial.read() или Serial.available() будут иметь смысл для данных, полученных после вызова Serial.flush().

Serial.flush(); // Очищаем буфер – начинаем прием данных «с чистого листа»

Описание:

Вывод данных на последовательный порт.

Параметры:

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

Serial.print(b, DEC) выводит ASCII-строку - десятичное представление числа b.

int b = 79;

Serial.print(b, HEX) выводит ASCII-строку - шестнадцатиричное представление числа b.

int b = 79;

Serial.print(b, OCT) выводит ASCII-строку - восьмеричное представление числа b.

int b = 79;
Serial.print(b, OCT); //выдаст в порт строку «117»

Serial.print(b, BIN) выводит ASCII-строку - двоичное представление числа b.

int b = 79;
Serial.print(b, BIN); //выдаст в порт строку «1001111»

Serial.print(b, BYTE) выводит младший байт числа b.

int b = 79;
Serial.print(b, BYTE); //выведет число 79 (один байт). В мониторе
//последовательного порта получим символ «O» - его
//код равен 79

Serial.print(str) если str – строка или массив символов, побайтно передает str на COM-порт.

char bytes = {79, 80, 81}; //массив из 3 байт со значениями 79,80,81
Serial.print("Here our bytes:"); //выводит строку «Here our bytes:»
Serial.print(bytes); //выводит 3 символа с кодами 79,80,81 –
//это символы «OPQ»

Serial.print(b) если b имеет тип byte или char, выводит в порт само число b.

char b = 79;
Serial.print(b); //выдаст в порт символ «O»

Serial.print(b) если b имеет целый тип, выводит в порт десятичное представление числа b.

int b = 79;
Serial.print(b); //выдаст в порт строку «79»

Описание:

Функция Serial.println аналогична функции Serial.print, и имеет такие же варианты вызова. Единственное отличие заключается в том, что после данных дополнительно выводятся два символа – символ возврата каретки (ASCII 13, или "\r") и символ новой линии (ASCII 10, или "\n").

Пример 1 и пример 2 выведут в порт одно и то же:

int b = 79;
Serial.print(b, DEC); //выдаст в порт строку «79»
Serial.print("\r\n"); //выведет символы "\r\n" – перевод строки
Serial.print(b, HEX); //выдаст в порт строку «4F»
Serial.print("\r\n");//выведет символы "\r\n" – перевод строки

int b = 79;
Serial.println(b, DEC); //выдаст в порт строку «79\r\n»
Serial.println(b, HEX); //выдаст в порт строку «4F\r\n»

В мониторе последовательного порта получим.



Рекомендуем почитать

Наверх