Главная chevron_right Уроки chevron_right Экосистема Arduino chevron_right Начало работы с Arduino: экосистема, железо и основы API

Начало работы с Arduino: экосистема, железо и основы API

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

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

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

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

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

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

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

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

Key components of an Arduino board.

Ключевые компоненты платы Arduino: 1 — микроконтроллер, 2 — USB-порт, 3 — USB-Serial чип, 4 — цифровые пины, 5 — аналоговые пины, 6 — 5V/3.3V, 7 — GND, 8 — VIN.

  • 1. Микроконтроллер — это мозг Arduino. Именно в него загружается программа. Представьте его как крошечный компьютер, заточенный под выполнение конкретного набора задач.
  • 2. USB-порт — используется для подключения платы к компьютеру.
  • 3. USB to Serial чип — важный компонент, который транслирует данные между компьютером и микроконтроллером. Именно благодаря ему вы можете загружать программы с компьютера на плату.
  • 4. Цифровые пины — пины, работающие с цифровой логикой (0, 1 или LOW/HIGH). Обычно используются для кнопок и управления светодиодами.
  • 5. Аналоговые пины — пины, умеющие считывать аналоговые значения с разрешением 10 бит (0–1023).
  • 6. 5V / 3.3V — пины питания для внешних компонентов.
  • 7. GND — также известен как ground, negative или просто -. Это «земля» схемы, точка с нулевым потенциалом.
  • 8. VIN — Voltage In, вход для подключения внешнего источника питания.

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

Как работает Arduino

Большинство плат Arduino рассчитаны на выполнение одной программы, загруженной в микроконтроллер. Эта программа может делать что-то одно — например, мигать светодиодом — или выполнять сотни действий в цикле. Всё зависит от задачи.

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

  • считать показания датчика;
  • включить свет;
  • проверить выполнение условия;
  • всё перечисленное сразу.

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

The basic operation of an Arduino.

Базовая логика работы программы Arduino: СТАРТ → СЧИТАТЬ ДАТЧИК → ВКЛЮЧИТЬ СВЕТ → ЖДАТЬ 2 СЕКУНДЫ → ВЕРНУТЬСЯ К СТАРТУ.

Основы схемотехники

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

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

An LED circuit with an Arduino.

Схема подключения светодиода к Arduino.

Цепи принято изображать в виде схем — своеобразных чертежей. На изображении ниже показана принципиальная схема той же цепи:

Schematics of a circuit.

Принципиальная схема цепи: РЕЗИСТОР 220 Ом последовательно со светодиодом (LED).

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

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

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

Basics of an analog signal.

График аналогового сигнала: ось X — ВРЕМЯ, ось Y — НАПРЯЖЕНИЕ.

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

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

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

Подробнее о Analog Inputs и Analog Outputs (PWM).

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

Basics of a digital signal.

График цифрового сигнала: ось X — ВРЕМЯ, ось Y — НАПРЯЖЕНИЕ. Значения: 5V = 1, 0V = 0.

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

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

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

Два примера двоичных последовательностей:

101110001110011

В десятичном формате это:

23667

Таким образом, быстро переключая состояния сигнала, можно передавать большие объёмы данных. Для интерпретации этих данных используются Serial Communication Protocols.

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

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

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

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

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

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

Цифровые датчики устроены сложнее. Они используют Serial Communication Protocols для передачи данных, и для их расшифровки нужно дополнительно настраивать программу. Как упоминалось в разделе Electronic Signals, данные передаются в виде двоичной последовательности (например, 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){        //проверить, равно ли состояние HIGH (кнопка нажата)
    digitalWrite(LED, HIGH);    //включить светодиод
} else {
    digitalWrite(LED, LOW);     //выключить светодиод
}

Протоколы Serial-связи

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

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

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

Подробнее — в статьях Arduino SPI Guide и Arduino I2C Guide.

Память

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

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

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

Объём памяти зависит от конкретной платы. Например, Arduino UNO имеет 32 КБ Flash и 2 КБ SRAM, а Nano 33 IoT — 256 КБ Flash и 32 КБ SRAM. Эти данные можно найти в документации к каждому продукту — она доступна в Arduino Hardware Documentation.

Подробнее о памяти Arduino — в статье Arduino Memory Guide.

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

An IMU (Inertial Measurement Unit) on the Nano RP2040 Connect board.

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

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

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

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

The u-blox NINA-W102 Wi-Fi / Bluetooth® module on the Nano RP2040 Connect board.

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

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

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

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

Arduino API

Полный справочник Arduino API доступен на Arduino Language Reference.

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

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

Arduino API делится на три части: функции, переменные и структура:

  • Функции: управление платой и вычисления. Например, чтение и запись состояния цифрового пина, масштабирование значений, последовательная связь.
  • Переменные: константы, типы данных и преобразования. Например, int, boolean, array.
  • Структура: элементы кода Arduino (C++):
  • скетч (loop(), setup())
  • управляющие структуры (if, else, while, for)
  • арифметические операторы (умножение, сложение, вычитание)
  • операторы сравнения: == (равно), != (не равно), > (больше).

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

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

Минимально необходимый Arduino-скетч содержит две функции: void setup() и void loop(). Ключевое слово void означает, что функция ничего не возвращает.

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

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

Скетч

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

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

Ниже приведён пример стандартного 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 — это расширение стандартного API. Их существуют тысячи: официальные и созданные сообществом.

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

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

#include <Library.h>

Большинство библиотек поставляются с примерами — отличная отправная точка для изучения.

Все официальные и сторонние библиотеки можно найти в Arduino Libraries page.

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 IDEs доступны для бесплатной загрузки на Software downloads page.

Программные инструменты — ещё одна важная часть экосистемы Arduino.

Arduino IDE — это интегрированная среда разработки. Что это означает на практике?

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

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

  • Arduino IDE 1.8.x (классическая)
  • Arduino IDE 2 (новая)
  • Arduino Cloud Editor (онлайн)

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

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

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

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

3. Компиляция скетча — написанный код преобразуется в бинарный файл (единицы и нули). Если в коде есть ошибки, они отобразятся в консоли.

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

5. Serial Monitor (опционально) — инструмент Serial Monitor, доступный во всех IDEs, позволяет получать данные с платы прямо на экране компьютера. Незаменим при отладке.

Arduino IDE 1.8.x

The classic Arduino IDE.

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

Arduino IDE 1.8.x, или «Java IDE», — это «легаси»-редактор, который появился вместе с Arduino в самом начале.

Подробнее — на странице Arduino IDE 1 documentation.

Arduino IDE 2

The new Arduino IDE.

Новая Arduino IDE 2.

В 2021 году вышла Arduino IDE 2. Функционально она схожа с предшественницей, но добавляет автодополнение кода и возможности отладки.

Подробнее — на странице Arduino IDE 2 documentation.

Cloud Editor

The Cloud Editor.

Облачный редактор Arduino (Cloud Editor).

Arduino Cloud Editor — это онлайн-IDE, часть платформы Arduino Cloud. Работает полностью в браузере и хранит скетчи в облаке. Для работы потребуется учётная запись Arduino.

Подробнее — на странице Cloud Editor documentation.

Arduino Cloud

The Arduino Cloud.

Платформа Arduino Cloud с дашбордом.

Arduino Cloud позволяет настраивать, программировать и контролировать устройства — всё в одном веб-приложении. С помощью things (цифровых двойников устройств) можно управлять переменными и следить за ними через дашборды. Платформа поддерживает вебхуки и интеграции со сторонними сервисами, например Amazon Alexa.

Cloud рассчитан на любого пользователя и не требует серьёзного опыта для старта.

Начните с руководства Getting Started with the Arduino Cloud или посетите full documentation.

Менеджер библиотек

Library manager on IDE 1.8.x and IDE 2

Менеджер библиотек в IDE 1.8.x и IDE 2.

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

Все доступные библиотеки Arduino — в Arduino Libraries page.

Arduino CLI

The Arduino CLI (Command Line Interface).

Интерфейс командной строки Arduino CLI.

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

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

Подробнее — на странице Arduino CLI documentation.

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

В этом разделе собраны наиболее часто используемые элементы стандартного 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 functions.

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

Пример функции типа 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.

Наиболее распространённые типы данных:

byte
char
double
float
int
long
short
String

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

int exampleNumber = 25;

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

float exampleNumber = 22.2123002;

Чтобы хранить строку, используется тип String:

String exampleSentence = "This is a string!";

Для простых переключателей и значений «истина/ложь» — булев тип:

bool exampleSwitch = true; // true/false

Serial-связь

Подробнее о Serial class.

Последовательная связь — основа 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)

Настройка, управление и считывание состояния цифровых и аналоговых пинов.

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); // записать HIGH (1) на пин (включить его)
digitalWrite(pin, LOW); // записать 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. В примере ниже цикл прерывается при выполнении условия:

  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) {
    //что-то сделать
}

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

Логические операторы (NOT !, AND &&, OR ||) позволяют строить более сложные условия.

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

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

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

if(value > 10 || otherValue > 10){
    //выполнить если выполнено *одно или другое* условие
}

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

if(!value){
    //выполнить если значение ложно (!)
}

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

Составные операторы объединяют два действия в одном выражении — например, сложение + и присваивание = одновременно.

Примеры:

x = 5;
y = 2;

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

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

Заключение

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

Для углублённого изучения загляните на Arduino Documentation и в Arduino Language Reference: там тысячи подробных уроков, примеров, описаний API и других ресурсов.

Купить плату Arduino можно на Arduino Store.

Скачать Arduino IDE — на Arduino Software page.