Скетчи Arduino

Узнайте, как устроены скетчи и как они загружаются в Arduino.

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

В руководстве по началу работы (Windows, MacOS, Linux) вы загрузили скетч, который мигает светодиодом. В этом туториале вы узнаете, как работает каждая часть этого скетча.

Скетч (sketch) — это название, которое Arduino использует для программы. Это единица кода, которая загружается в Arduino-плату и выполняется на ней.

Комментарии

Первые несколько строк скетча Blink являются комментарием:

/*
 * Blink
 *
 * The basic Arduino example.  Turns on an LED on for one second,
 * then off for one second, and so on...  We use pin 13 because,
 * depending on your Arduino board, it has either a built-in LED
 * or a built-in resistor so that you need only an LED.
 *
 * http://www.arduino.cc/en/Tutorial/Blink
 */

Всё, что находится между

/*

и

*/

игнорируется Arduino при выполнении скетча (символ

*

в начале каждой строки нужен только для того, чтобы комментарий выглядел красиво, и не является обязательным). Он нужен для людей, читающих код: чтобы объяснить, что делает программа, как она работает или почему она написана именно так. Хорошая практика — комментировать свои скетчи и поддерживать комментарии в актуальном состоянии при изменении кода. Это помогает другим людям учиться по вашему коду или модифицировать его.

Существует ещё один стиль для коротких однострочных комментариев. Они начинаются с

//

и продолжаются до конца строки. Например, в строке:

int ledPin = 13;                // LED connected to digital pin 13

сообщение «LED connected to digital pin 13» — это комментарий.

Переменные

Переменная — это место для хранения какого-либо значения данных. У неё есть имя, тип и значение. Например, строка из приведённого выше скетча Blink объявляет переменную с именем

ledPin

типа

int

и начальным значением 13. Она используется для указания, к какому пину Arduino подключён светодиод. Каждый раз, когда имя

ledPin

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

ledPin

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

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

Функции

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

setup()

из примера Blink:

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

Первая строка содержит информацию о функции, например её имя — «setup». Текст до и после имени задаёт тип возвращаемого значения и параметры: они будут объяснены позже. Код между

{

и

}

называется телом функции: то, что функция делает.

Вы можете вызвать уже определённую функцию (либо в вашем скетче, либо как часть языка Arduino). Например, строка

pinMode(ledPin, OUTPUT);

вызывает функцию

pinMode()

передавая ей два параметра:

ledPin

и

OUTPUT

Эти параметры используются функцией

pinMode()

чтобы определить, какой пин и в каком режиме настроить.

pinMode(), digitalWrite() и delay()

Функция

pinMode()

настраивает пин либо как вход, либо как выход. Чтобы её использовать, передайте ей номер пина для настройки и константу INPUT или OUTPUT. Когда пин настроен как вход, он может определять состояние датчика, например кнопки; это рассматривается в туториале Digital Read Serial. В качестве выхода он может управлять исполнительным устройством, например светодиодом.

Функция

digitalWrite()

выводит значение на пин. Например, строка:

digitalWrite(ledPin, HIGH);

устанавливает

ledPin

(пин 13) в HIGH, или 5 вольт. Запись LOW на пин подключает его к земле, или 0 вольт.

Функция

delay()

заставляет Arduino ждать указанное количество миллисекунд перед переходом к следующей строке. В одной секунде 1000 миллисекунд, поэтому строка:

delay(1000);

создаёт задержку в одну секунду.

setup() и loop()

Существуют две специальные функции, которые являются частью каждого скетча Arduino:

setup()

и

loop()

Функция

setup()

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

loop()

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

Упражнения

1. Измените код так, чтобы светодиод горел 100 миллисекунд и не горел 1000.

2. Измените код так, чтобы светодиод включался при запуске скетча и оставался включённым.

См. также