Начало работы с Arduino

Введение в аппаратную часть, программные инструменты и Arduino API.

Автор: Karl Söderby

Последняя редакция: 26.09.2025

Платформа Arduino, появившаяся в 2005 году, выросла и стала одним из самых узнаваемых брендов в области электроники и встраиваемых систем.

Но что является краеугольными камнями Arduino? Что такое «плата», как написать для неё код, и какие инструменты нужны для создания собственного проекта? Цель этого руководства — дать вам общее представление о проекте Arduino.

Примечание

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

Аппаратная часть Arduino

За годы существования Arduino выпустила сотни аппаратных решений в самых разных формах и форматах.

Анатомия платы Arduino

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

Ключевые компоненты платы Arduino.

Ключевые компоненты платы Arduino.

  • 1. Микроконтроллер — это «мозг» Arduino, компонент, в который мы загружаем программы. Считайте его крошечным компьютером, спроектированным для выполнения только определённого набора задач.

  • 2. USB-порт — используется для подключения платы Arduino к компьютеру.

  • 3. Чип USB-to-Serial — важный компонент, помогающий преобразовывать данные, поступающие, например, от компьютера, к встроенному микроконтроллеру. Именно благодаря ему возможно программирование платы Arduino с компьютера.

  • 4. Цифровые пины — пины, использующие цифровую логику (0, 1 или LOW/HIGH). Часто применяются для работы с переключателями и для включения/выключения светодиодов.

  • 5. Аналоговые пины — пины, способные считывать аналоговые значения с 10-битным разрешением (0–1023).

  • 6. Пины 5V / 3.3V — используются для питания внешних компонентов.

  • 7. GND — также известный как ground, negative или просто -, используется для замыкания цепи, где электрический уровень равен 0 вольт.

  • 8. VIN — расшифровывается как Voltage In («вход напряжения»), сюда можно подключить внешний источник питания.

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

Базовая работа

Большинство плат Arduino спроектированы так, что на микроконтроллере работает одна-единственная программа. Эта программа может быть рассчитана на выполнение всего одного действия, например, на мигание светодиода. А может выполнять сотни действий по кругу. Масштаб варьируется от программы к программе.

Программа, загруженная в микроконтроллер, начинает выполняться, как только подаётся питание. В каждой программе есть функция «loop». Внутри функции loop можно, например:

  • Считывать данные с датчика.

  • Включать свет.

  • Проверять, выполнено ли какое-либо условие.

  • Всё вышеперечисленное.

Скорость работы программы невероятно высока, если только мы сами не велим ей замедлиться. Она зависит от размера программы и от того, сколько времени микроконтроллеру требуется на её выполнение, но обычно это микросекунды (одна миллионная секунды).

Базовая работа Arduino.

Базовая работа Arduino.

Основы электрических цепей

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

Простой пример цепи — светодиодная цепь. Провод соединяет пин Arduino со светодиодом через резистор (для защиты светодиода от слишком большого тока), а затем уходит на пин земли (GND). Когда пин переведён в высокое состояние (HIGH), микроконтроллер на плате Arduino пропускает электрический ток через цепь, и светодиод загорается. Когда пин переведён в низкое состояние (LOW), светодиод гаснет, поскольку ток через цепь не течёт.

Светодиодная цепь с Arduino.

Светодиодная цепь с Arduino.

Цепи обычно изображаются в виде схем (schematics), которые являются чертежами вашей цепи. На изображении ниже показано схемное представление той же цепи, что показана выше.

Схематичное изображение цепи.

Схематичное изображение цепи.

Электрические сигналы

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

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

Основы аналогового сигнала.

Основы аналогового сигнала.

Аналоговый сигнал, как правило, ограничен определённым диапазоном. В Arduino этот диапазон обычно составляет 0–5 В или 0–3,3 В.

Если, например, мы используем потенциометр (аналоговый компонент, применяемый для изменения сопротивления цепи), мы можем вручную регулировать этот диапазон (0–5 В). В программе это представляется диапазоном 0–1023, что соответствует 10-битному разрешению.

Если мы записываем аналоговый сигнал с помощью широтно-импульсной модуляции (PWM), то можем использовать диапазон 0–255, поскольку используем 8-битное разрешение.

Совет

Подробнее об аналоговых входах и аналоговых выходах (PWM) читайте на страницах Analog Input и Analog Output (PWM).

Цифровой сигнал

Основы цифрового сигнала.

Основы цифрового сигнала.

Цифровой сигнал работает несколько иначе: он представляет всего два бинарных состояния (0 или 1), которые в программе считываются как высокое или низкое состояние. Это самый распространённый тип сигнала в современной технике.

На Arduino очень легко считывать и записывать цифровые сигналы — это полезно, например, для считывания состояний кнопок или для включения/выключения чего-либо.

Цифровые сигналы могут показаться очень простыми (всего лишь 0 или 1), но на самом деле они гораздо сложнее. Например, мы можем создать последовательность, быстро посылая высокие или низкие состояния много раз подряд. Это называется бинарной последовательностью или битовым потоком (bitstream).

Рассмотрим две бинарные последовательности:

1101101
101110001110011

Что в десятичном формате выглядит так:

145
23667

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

Датчики и исполнительные устройства

При работе с Arduino важно понимать, что такое датчики (sensors) и исполнительные устройства (actuators) и в чём разница между ними.

Что такое датчик?

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

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

Существует множество типов датчиков и несколько способов считывания данных с них. Пожалуй, самый простой в использовании — аналоговый датчик: с его помощью мы передаём диапазон значений, изменяя напряжение, подаваемое на аналоговый пин Arduino (обычно от 0 до 5 вольт). Это просто даёт диапазон 0–1023 (10-битное разрешение).

Цифровые датчики устроены немного сложнее, в зависимости от типа. Они опираются на протоколы последовательной связи для передачи данных и требуют чуть больших усилий для расшифровки данных. Как упоминалось в разделе «Электрические сигналы» выше, данные передаются с помощью бинарной последовательности (например, 101101 — это 45), и это нужно обрабатывать и настраивать на программном уровне. К счастью, многие датчики поставляются с программными библиотеками, которые значительно упрощают чтение данных.

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

sensorValue = sensor.read();

Что такое исполнительное устройство?

Исполнительное устройство (актуатор), простыми словами, используется для того, чтобы приводить в действие или изменять физическое состояние. Несколько примеров:

  • Источник света (например, светодиод).

  • Двигатель.

  • Переключатель.

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

Способ управления исполнительными устройствами действительно зависит от того, какой компонент у нас есть. Самый простой вариант — просто включать/выключать что-либо, более сложный — управлять величиной напряжения, получаемого компонентом (то есть, скоростью двигателя).

Для управления актуаторами обычно используют digitalWrite() и analogWrite().

digitalWrite(LED, HIGH); //включить светодиод
digitalWrite(LED, LOW);  //выключить светодиод

analogWrite(motor, 255); //задать двигателю максимальную мощность
analogWrite(motor, 25);  //задать двигателю 10% его мощности

Вход и выход

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

Простой пример этого — кнопка и светодиод. Мы можем написать условие, которое проверяет, нажата ли кнопка, и включает светодиод, а если кнопка не нажата — выключает его. В программе Arduino это выглядит так:

int buttonState = digitalRead(buttonPin);   //считать и сохранить состояние кнопки (0 или 1)

if(buttonState == HIGH){        //проверяем, высокое ли состояние (кнопка нажата)
    digitalWrite(LED, HIGH);    //включить светодиод
} else {
    digitalWrite(LED, LOW);     //выключить светодиод
}

Протоколы последовательной связи

Существует несколько протоколов последовательной связи, использующих упомянутые выше цифровые сигналы для передачи данных. Самые распространённые — UART, SPI и I²C. Протокол UART, помимо прочего, используется для передачи данных между компьютером и платой Arduino, например для загрузки новой программы или для прямого считывания данных с Arduino.

Протоколы SPI и I²C используются для связи как между внутренними, так и между внешними компонентами. Связь обеспечивается так называемой последовательной шиной (serial bus), привязанной к определённому пину Arduino.

С помощью протокола I²C мы можем подключить несколько датчиков к одному пину и точно получать с них данные. У каждого устройства есть адрес, который мы должны указать в программе и использовать при запросе данных.

Совет

Подробнее читайте в Arduino SPI Guide и Arduino I2C Guide.

Память

«Стандартная» Arduino обычно имеет два типа памяти: SRAM и Flash.

SRAM (Static Random-Access Memory — статическая оперативная память) используется, например, для хранения значения переменной (такой как состояние булевой переменной). При отключении питания эта память обнуляется.

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

Объём доступной памяти на Arduino варьируется от платы к плате. Например, у Arduino UNO 32 КБ flash / 2 КБ SRAM, а у Nano 33 IoT — 256 КБ flash / 32 КБ SRAM. Эту информацию вы найдёте на страницах документации каждого продукта, доступных в документации по аппаратной части Arduino.

Совет

Чтобы узнать больше о памяти на Arduino, посетите Arduino Memory Guide.

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

IMU (инерциальный измерительный модуль) на плате Nano RP2040 Connect.

IMU (инерциальный измерительный модуль) на плате Nano RP2040 Connect.

Многие новые платы Arduino поставляются с встроенными датчиками. Например, Nano 33 BLE Sense имеет 7 встроенных датчиков, при этом её размеры составляют всего 45×18 мм (размер пальца). Все они подключены через протокол I²C, как упомянуто выше, и имеют уникальный адрес.

Интернет вещей (IoT)

Большинство современных плат Arduino теперь оснащены радиомодулем, предназначенным для беспроводной связи. Существует несколько различных видов: Wi-Fi, Bluetooth®, LoRa®, GSM, NB-IoT и другие. Каждый из них предназначен для связи с использованием различных технологий, представленных на рынке.

Модуль Wi-Fi / Bluetooth® u-blox NINA-W102 на плате Nano RP2040 Connect.

Модуль Wi-Fi / Bluetooth® u-blox NINA-W102 на плате Nano RP2040 Connect.

Самые популярные и недорогие модули — это Wi-Fi и Bluetooth®. Wi-Fi-модули позволяют вашей плате подключаться к маршрутизаторам, запрашивать и отправлять данные по интернету. По сути, это работает так же, как ваш компьютер, когда он запрашивает различные данные из интернета — только в меньшем масштабе.

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

Подобно последовательным протоколам, радиомодули используют свой собственный набор протоколов для связи, например HTTP, MQTT и UDP.

Arduino API

Совет

Посетите Arduino Language Reference, чтобы изучить полный Arduino API.

Arduino API, он же «язык программирования Arduino», состоит из множества функций, переменных и структур, основанных на языке C/C++.

Основные части

Arduino API можно разделить на три основные части: функции, переменные и структура:

  • Функции: для управления платой Arduino и выполнения вычислений. Например, для чтения или записи состояния цифрового пина, для отображения значения (map) или для использования последовательной связи.

  • Переменные: константы Arduino, типы данных и преобразования. Например, int, boolean, array.

  • Структура: элементы кода Arduino (C++), такие как:

    • скетч (loop(), setup())

    • управляющие конструкции (if, else, while, for)

    • арифметические операторы (умножение, сложение, вычитание)

    • операторы сравнения, такие как == (равно), != (не равно), > (больше).

Arduino API можно описать как упрощённый язык программирования C++, с большим количеством дополнений для управления аппаратной частью Arduino.

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

Абсолютный минимум программы Arduino — это использование двух функций: void setup() и void loop(). Слово «void» означает, что при выполнении ничего не возвращается.

  • void setup() — эта функция выполняется только один раз, когда Arduino получает питание. Здесь мы определяем такие вещи, как режим работы пина (вход или выход), скорость последовательной связи (baud rate) или инициализация библиотеки.

  • void loop() — здесь мы пишем код, который должен выполняться снова и снова, например, включать/выключать лампу в зависимости от входного сигнала или раз в X секунд считывать данные с датчика.

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

«Скетч»

В проекте Arduino программа называется «скетчем». Скетч — это файл, в котором вы пишете свою программу. Он имеет расширение .ino и всегда хранится в папке с тем же именем.

Папка может содержать и другие файлы, например заголовочный файл (header file), который можно подключить к скетчу.

Пример скетча

Ниже приведён пример стандартного скетча Arduino, содержащего некоторые популярные элементы программирования Arduino.

/*
Это комментарий в начале программы,
он не будет распознан как код. Очень удобно
добавить здесь объяснение того,
что делает ваш код.

Этот скетч показывает, как считать значение
с датчика, подключённого к пину A1, вывести его
в Serial Monitor и включить светодиод, подключённый
к пину 2, если выполнено условие.
*/

int sensorPin = A1; //определяем пин A1 (аналоговый пин)
int ledPin = 2; //определяем пин 2 (цифровой пин)
int sensorValue; //создаём переменную для хранения показаний

//void setup нужен для конфигураций при запуске
void setup() {
    Serial.begin(9600); //инициализируем последовательную связь
    pinMode(ledPin, OUTPUT); //определяем ledPin как выход
}

void loop() {
    sensorValue = analogRead(sensorPin); // считываем датчик

    Serial.print("Sensor value is: "); //выводим сообщение в serial monitor
    Serial.println(sensorValue); //выводим значение в serial monitor

    //проверяем, ниже ли значение sensorValue, чем 200
    if(sensorValue < 200) {
        digitalWrite(ledPin, HIGH); //если да — включаем светодиод на пине 2.
    }
    //если sensorValue выше 200, выключаем светодиод
    else{
        digitalWrite(ledPin, LOW);
    }
}

Библиотеки

Библиотеки Arduino — это расширение стандартного Arduino API, состоящее из тысяч библиотек, как официальных, так и созданных сообществом.

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

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

#include <Library.h>

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

Совет

Просмотреть все официальные и созданные сообществом библиотеки можно на странице Arduino Libraries.

Специфические для ядра API

Каждой плате Arduino требуется «ядро» (core) или «пакет» (package), который должен быть установлен для её программирования. Все пакеты содержат стандартный Arduino API, но также и специфический API, который можно использовать только с конкретными платами.

Например, классический пакет ArduinoCore-avr автоматически включает библиотеки EEPROM и SoftwareSerial, и их можно использовать без дополнительной установки. В этот пакет входят классические Arduino UNO, Nano, Mega2560 и другие.

Ещё один пример — пакет ArduinoCore-mbed, включающий более 40 библиотек, рассчитанных на специфические возможности плат, такие как:

  • PDM — для сэмплирования звука с микрофонов на платах Nano 33 BLE Sense и Nano RP2040 Connect.

  • Ethernet — для использования возможностей Ethernet на Portenta Vision Shield.

  • GSM — для доступа к функциям GSM на Portenta Cat. M1/NB IoT GNSS Shield.

Эти возможности задокументированы на главной странице документации каждого продукта. Полный список оборудования можно найти на docs.arduino.cc.

Программные инструменты Arduino

Совет

Arduino IDE доступны для бесплатной загрузки на странице загрузки ПО.

Ещё одна неотъемлемая часть экосистемы Arduino — её программные инструменты.

Arduino IDE, как её обычно называют, — это интегрированная среда разработки. Но что это значит на самом деле?

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

Arduino IDE обеспечивает весь этот процесс — от первой написанной строки кода до её выполнения на микроконтроллере платы Arduino. Это программа или приложение, которое можно загрузить (или использовать онлайн-версию), чтобы управлять всеми этапами разработки кода. Раньше это был непростой процесс, требующий хороших знаний в электронике и компьютерных науках. Сейчас же любой человек может научиться этому с помощью Arduino IDE.

Сегодня доступны три Arduino IDE:

  • Arduino IDE 1.8.x (классическая)

  • Arduino IDE 2 (новая)

  • Arduino Cloud Editor (онлайн)

Типичный рабочий процесс

Чтобы загрузить код на плату Arduino с помощью IDE, обычно выполняются следующие действия:

1. Установите свою плату — это означает установку правильного «пакета» для вашей платы. Без пакета вы попросту не сможете использовать плату. Установка выполняется прямо в IDE, это быстрая и простая операция.

2. Создайте новый скетч — скетч — это ваш основной файл программы. Здесь мы пишем набор инструкций, которые хотим выполнить на микроконтроллере.

3. Скомпилируйте скетч — код, который мы пишем, выглядит совсем не так, как загружается на Arduino: компиляция кода означает, что мы проверяем его на ошибки и преобразуем в бинарный файл (1 и 0). Если что-то не так, вы увидите сообщение об ошибке в консоли.

4. Загрузите скетч — после успешной компиляции код можно загрузить на плату. На этом шаге мы физически подключаем плату к компьютеру и выбираем правильный последовательный порт.

5. Serial Monitor (опционально) — для большинства проектов Arduino важно знать, что происходит на вашей плате. Инструмент Serial Monitor, доступный во всех IDE, позволяет передавать данные с платы на компьютер.

Arduino IDE 1.8.x

Классическая Arduino IDE.

Классическая Arduino IDE.

Тот, что сейчас считается «устаревшим» редактором, Arduino IDE 1.8.X, или «Java IDE», — это редактор, который был выпущен в самом начале появления Arduino.

Совет

Подробнее об этом читайте в документации Arduino IDE 1.

Arduino IDE 2

Новая Arduino IDE.

Новая Arduino IDE.

В 2021 году была выпущена Arduino IDE 2. Новая IDE имеет тот же функционал, но также поддерживает такие функции, как автодополнение и отладка.

Совет

Подробнее об этом читайте в документации Arduino IDE 2.

Cloud Editor

Cloud Editor.

Cloud Editor.

Arduino Cloud Editor — это онлайн-IDE, часть набора Arduino Cloud. Этот редактор имеет схожие функции, но полностью основан на веб-технологиях, с онлайн-хранилищем и другими возможностями. Чтобы использовать Cloud Editor, необходимо зарегистрировать аккаунт Arduino.

Совет

Подробнее об этом читайте в документации Cloud Editor.

Arduino Cloud

Arduino Cloud.

Arduino Cloud.

Arduino Cloud позволяет настраивать, программировать и контролировать/мониторить ваши устройства — всё в одном веб-приложении. С использованием things, или вашего «цифрового двойника», вы можете управлять и наблюдать за переменными прямо из дашбордов. Сервис также поддерживает webhooks и интеграции с другими сервисами, такими как Amazon Alexa.

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

Совет

Начните с прочтения руководства Getting Started with the Arduino Cloud или посетите полную документацию.

Library Manager

Library Manager в IDE 1.8.x и IDE 2.

Library Manager в IDE 1.8.x и IDE 2.

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

Совет

Чтобы изучить все доступные библиотеки Arduino, посетите страницу Arduino Libraries.

Arduino CLI

Arduino CLI (Command Line Interface).

Arduino CLI (Command Line Interface).

Arduino CLI — это инструмент командной строки, который можно использовать для компиляции и загрузки кода на плату. У него нет визуального интерфейса, но он очень удобен для автоматизации. Он рассчитан на более продвинутых пользователей.

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

Совет

Подробнее читайте в документации Arduino CLI.

Краткий справочник

В этом разделе вы найдёте список некоторых наиболее распространённых элементов стандартного Arduino API. Это поможет вам познакомиться с ключевыми «строительными блоками».

Чтобы изучить весь Arduino API, обратитесь к Arduino Language Reference — подробной вики, поддерживаемой Arduino и сообществом. Вы найдёте там сотни записей, сопровождаемых примерами кода и развёрнутыми описаниями.

Общие сведения

setup()

Функция setup() — это место, где вы делаете настройки программы.

void setup() {
    //конфигурации программы здесь
}

loop()

Функция loop() — это место, где хранится ваша основная программа. Она будет работать всё время, пока на плату подаётся питание.

void loop() {
    //основная программа здесь
}

delay()

Функция delay() приостанавливает программу на заданное число миллисекунд.

Классическая последовательность мигания приведена в фрагменте ниже:

void loop() {

   digitalWrite(LED, HIGH); //включить светодиод
   delay(1000); //программа на паузе, светодиод включён
   digitalWrite(LED, LOW); //программа продолжается, светодиод выключается
   delay(1000); //программа на паузе, светодиод выключен

}

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

Для этого мы можем использовать функцию millis().

millis()

Функция millis() немного сложнее, но это невероятно полезная функция. Она позволяет иметь несколько событий, происходящих одновременно, не приостанавливая программу. Это достигается путём измерения времени (в миллисекундах), прошедшего с момента запуска программы.

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

Смотрите пример ниже:

unsigned long previousMillis_1 = 0; //хранит время первого события
unsigned long previousMillis_2 = 0; //хранит время второго события

const long interval_1 = 1000; //интервал для первого события
const long interval_2 = 2000; //интервал для второго события


void setup(){

}

void loop() {

//проверяем время с момента запуска программы и сохраняем в "currentMillis"
unsigned long currentMillis = millis();

   //условие проверяет, прошла ли 1 секунда с последнего события
   if (currentMillis - previousMillis_1 >= interval_1) {
        previousMillis_1 = millis();
       //выполнить участок кода каждые *1 секунду*
   }

   //условие проверяет, прошло ли 2 секунды с последнего события
   if (currentMillis - previousMillis_2 >= interval_2) {
        previousMillis_2 = millis();
    //выполнить участок кода каждые *2 секунды*
   }

}

Хотя функция millis() — концепция более сложная, чем delay(), начинать практиковаться с ней лучше пораньше.

Функции

Совет

Подробнее о функциях Arduino.

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

Пример функции типа void, которая ничего не возвращает:

int x;

void loop(){
    thisFunction(); //вызов функции
}

void thisFunction() {
    x++; //увеличить x на 1 при каждом вызове функции.
}

Пример функции типа int, которая возвращает значение.

int value;

void setup(){

}

void loop(){
    value = returnFunction();
}

int returnFunction() {
    int returnValue = 5 + 2;
    return returnValue;
}

Определение переменных

Переменные могут создаваться локально или глобально. Переменные, объявленные в loop(), считаются локальными, а переменные, объявленные в начале скетча, — глобальными.

int sensorReading = x; //глобальная переменная

void setup(){

}

void loop(){
    int sensorReading = x; //локальная переменная
}

Типы данных

Совет

Все типы данных смотрите в Language Reference.

Существует несколько доступных типов данных, ниже — самые распространённые:

bool
byte
char
double
float
int
long
short
String

Чтобы сохранить данные, например в int (целое число):

int exampleNumber = 25;

Для чисел с большим количеством знаков после запятой можно использовать float:

float exampleNumber = 22.2123002;

Или, чтобы сохранить строку, можно использовать функцию String:

String exampleSentence = "This is a string!";

Для простых переключателей и значений true/false мы используем булевы переменные:

bool exampleSwitch = true; // true/false

Последовательная связь

Совет

Подробнее о классе Serial.

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

Для этого мы можем использовать класс Serial.

Serial.begin()

Инициализирует последовательную связь между платой и компьютером. Это определяется в функции void setup(), где также задаётся скорость связи (baud rate).

void setup() {
    Serial.begin(9600);
}

Serial.print()

Выводит данные на последовательный порт, которые можно увидеть в инструменте Serial Monitor в Arduino IDE.

void loop() {
    Serial.print();
}

Serial.read()

Считывает входящие данные с последовательного порта.

void loop() {
    int incomingByte = Serial.read();
}

GPIO / Управление пинами

Конфигурация, управление и считывание состояния цифровых/аналоговых пинов на Arduino.

pinMode()

Настраивает цифровой пин на работу как вход или выход. Настраивается внутри функции void setup().

pinMode(pin, INPUT); //настраивает пин как вход
pinMode(pin, OUTPUT); //настраивает пин как выход
pinMode(pin, INPUT_PULLUP); //включает встроенный подтягивающий резистор

Совет

Подробнее о цифровых пинах читайте в статье Digital Pins.

digitalRead()

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

int state = digitalRead(pin); //сохранить состояние в переменной "state"

digitalWrite()

Записывает высокое или низкое состояние на цифровой пин. Используется для включения или выключения компонента.

digitalWrite(pin, HIGH); // записывает высокое (1) состояние на пин (т.е. включает его)
digitalWrite(pin, LOW); // записывает низкое (0) состояние на пин (т.е. выключает его)

analogRead()

Считывает напряжение на аналоговом пине и возвращает значение от 0 до 1023 (10-битное разрешение). Используется для считывания аналоговых компонентов.

sensorValue = analogRead(A1); //сохраняет считанное значение с A1 в переменной "sensorValue"

analogWrite()

Записывает значение от 0 до 255 (8-битное разрешение). Используется для регулировки яркости света или установки скорости двигателя. Также называется PWM, или широтно-импульсной модуляцией.

analogWrite(pin, value); //записать значение в диапазоне 0-255 на конкретный пин

PWM доступен только на определённых пинах (отмеченных символом «~»).

Структура

Структура Arduino API основана на C++ и может рассматриваться как строительные блоки программы.

Условные конструкции

Условные конструкции — одни из самых популярных элементов в любой программе. В Arduino типичная условная конструкция состоит из if и else.

if(variable == true){
    //сделать что-то
}
else {
    //сделать что-то другое
}

В коде можно использовать сразу несколько конструкций if/else.

Циклы / Итерации

Циклы for и while обычно используются в программах, чтобы выполнять блок кода в течение заданного числа раз или пока выполняется условие.

Базовое использование цикла while для выполнения блока кода, пока variable истинна.

while (variable == true) {
    //сделать что-то
}

Базовое использование цикла for для выполнения блока кода заданное число раз (в данном случае — 10).

for (int x = 0; x < 10; x++) {
      //сделать что-то 10 раз
  }

Чтобы выйти из цикла, можно использовать break. В фрагменте ниже, если выполняется условие (variable истинна), мы выходим из цикла.

for (int x = 0; x <= 10; x++) {
      if(variable == true) {
          break;
      }
  }

Арифметические операторы

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

int x = 5;
int y = 2;

x + y; //результат 7
x * y; //результат 10
x - y; //результат 3

Операторы сравнения

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

Существует несколько операторов сравнения:

!= //не равно
<  //меньше
<= //меньше или равно
== //равно
>  //больше
>= //больше или равно

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

if(value > 10) {
    //сделать что-то
}

Логические операторы

Логические операторы (логическое НЕ !, И && и ИЛИ ||) могут, например, использоваться для более сложных условий.

Использование оператора И &&:

if(value > 10 && otherValue > 10){
    //сделать что-то только если *оба* условия выполнены
}

Использование оператора ИЛИ ||:

if(value > 10 || otherValue > 10){
    //сделать что-то, если выполнено хотя бы *одно* из условий
}

Использование оператора НЕ !:

if(!value){
    //сделать что-то, если value ложно (!)
}

Составные операторы

Составные операторы состоят из двух операторов, которые используются для выполнения двух операций в одном выражении. Это может быть, например, прибавить + и присвоить = значение одновременно.

Несколько примеров:

x = 5;
y = 2;

x++; //увеличить на 1, теперь x равно 6
x--; //уменьшить на 1, теперь x равно 4

x += y; //теперь x равно 7 (сложить и присвоить)
x -= y; //теперь x равно 3 (вычесть и присвоить)
x *= y; //теперь x равно 10 (умножить и присвоить)

Заключение

В этом руководстве мы коснулись некоторых основ Arduino: аппаратной части, программных инструментов, того, что такое Arduino API, и краткого знакомства с ним. Это руководство служит главным образом введением в Arduino и пониманием базовых концепций.

Чтобы узнать больше, вы можете изучить документацию Arduino и Arduino Language Reference, где вы найдёте тысячи подробных туториалов, примеров, записей API и других ресурсов.

Чтобы приобрести плату Arduino, посетите Arduino Store.

Чтобы загрузить версию Arduino IDE, посетите страницу Arduino Software.