
Массивы в Ардуино подобны переменным – они могут хранить показания датчиков, текстовые строки и логические значения, такие как high и low. Но переменная может хранить только одно значение за раз. Массивы, в свою очередь, могут хранить несколько значений одновременно. Если вы рассматриваете переменную как контейнер для хранения данных, массивы похожи на этот контейнер, но с разделителями, которые вы можете использовать для хранения нескольких частей данных.
Массивы особенно полезны для управления светодиодными матрицами, матричными клавиатурами и ЖК-дисплеями на Arduino.
Как работать с массивами в Ардуино
Например, код для массива выглядит так:
int array[5] = {3, 5, 2, 8, 9};
Создание массива называется инициализацией массива. В этом примере тип данных массива — целое число int
, а имя массива — array[]
. В то время, как число в квадратных скобках — это индекс массива. Индекс массива определяет количество элементов в массиве.
По сути говоря, элементы — это значения, которые вы хотите сохранить в массиве. В этом массиве есть пять элементов (3, 5, 2, 8 и 9), поэтому индекс массива равен 5. Элементы массива записываются в фигурные скобки и разделяются запятыми. Это называется списком инициализации массива.
Примите к вашему сведению, что массивы индексируются от нуля, что означает, что первому элементу присваивается нулевой индекс, второму элементу присваивается индекс один, третьему элементу присваивается индекс два и так далее:

Чтобы использовать элементы массива в скетче, напишите имя массива и поместите индекс элемента в квадратные скобки.
Например, предположим, что вы хотите вывести число восемь из приведенного выше массива в монитор порта. Элемент с номером восемь имеет индекс, равный трем, поэтому код будет выглядеть следующим образом:
Serial.print(array[3]);
Когда массив инициализируется следующим образом:
int array[5] = {3, 5, 2, 8, 9};
Мы объявляем размер массива и одновременно инициализируем элементы в массиве. Но массивы также могут быть объявлены без инициализации элементов. А уже позже элементы могут быть добавлены в массив в скетче.
В первую очередь объявите массив в верхней части скетча, написав имя массива и количество элементов массива в квадратных скобках:
int array[5];
Позже в скетче вы можете сохранить различные значения в массиве, установив массив равным элементу, который вы хотите сохранить в определенном индексе. Номер индекса заключен в квадратные скобки. Например, это присваивает число четыре индексу два массива array[]:
array[2] = 4;
Массивы также могут быть инициализированы без установки размера массива. Вместо того, чтобы заключать размер массива в квадратные скобки, как указано выше, вы можете оставить скобки пустыми, и размер массива будет определен автоматически:
int array[] = {3, 5, 2, 8, 9};
Типы данных массива
В массиве можно использовать любой тип данных. Можно использовать все типы данных float
, String
, byte
и char
. Но все элементы в массиве должны иметь один и тот же тип данных.
При использовании массивов char
в Arduino размер массива должен быть на единицу больше, чем количество фактических символов. Дополнительный элемент хранит нулевой символ. Например, чтобы использовать массив символов для хранения слова «Start»:
char array[6] = {"Start"};
В “Start” всего пять символов, но индекс массива равен шести.
Пример проекта с использованием массивов в Ардуино
Массивы обычно используются с циклами for
для автоматической установки номеров контактов или для одновременного управления состоянием напряжения нескольких контактов.
В качестве примера того, как использовать массивы на Arduino, давайте построим схему, которая управляет массивом светодиодов. Каждый светодиод в массиве будет мигать и гаснуть один за другим.
В этом проекте используются следующие детали:
- Arduino
- Соединительные провода (7 штук)
- Макетная плата
- Светодиоды (6 штук)
- Резистор 330 Ом
Следуйте этой схеме подключения, чтобы собрать электрическую цепь:

Катод каждого светодиода соединен с землей через токоограничивающий резистор 330 Ом. После подключения схемы загрузите этот код в Arduino:
int ledPins[6] = {12, 11, 10, 9, 8, 7}; void setup() { for (int i = 0; i < 6 ; i++) { pinMode(ledPins[i], OUTPUT); } } void loop() { for (int j = 0; j < 6; j++) { digitalWrite(ledPins[j], HIGH); delay(500); digitalWrite(ledPins[j], LOW); delay(500); } }

Объяснение кода
Этот проект идеально подходит для массивов, так как в нем есть много контактов, которые делают практически одно и то же – включают и выключают светодиоды. В верхней части скетча мы инициализируем массив с именем ledPins[] для хранения шести номеров контактов, которые подключены к светодиодом (контакты 7-12).
Обычно мы устанавливаем режимы ввода/вывода для каждого контакта в функции setup()
с помощью отдельных функций pinMode(). Но теперь, когда контакты хранятся в массиве ledPins[], мы можем использовать цикл for
для их установки всего двумя строками кода. В условии цикла for
мы объявляем переменную-счетчик i и устанавливаем ее равной 0. Затем мы устанавливаем индекс каждого элемента с i<6
. Затем i++
увеличивает переменную i на единицу при каждой итерации цикла for
.
В теле цикла for
есть функция pinMode()
. Первым аргументом этой функции обычно является номер вывода, который будет установлен как вход или выход, но вместо этого мы можем ввести массив ledPins[] с переменной-счетчиком i в квадратных скобках. Каждый контакт будет выходом, поэтому второй аргумент функции pinMode()
— OUTPUT
. Цикл for
повторяется шесть раз, устанавливая режим вывода для каждого элемента в массиве ledPins[].
В разделе loop()
у нас есть еще один цикл for
, который заставит каждый светодиод включаться и выключаться в течение 500 миллисекунд один за другим.
В условии цикла for
мы объявляем переменную-счетчик j и устанавливаем ее равной 0. Мы по-прежнему хотим пройтись по каждому элементу массива ledPins[], поэтому устанавливаем условие j<6
. Затем у нас есть j++
для увеличения счетчика на единицу при каждой итерации цикла for
. Код в теле цикла будет выполняться один раз для каждого элемента массива ledPins[].
В теле цикла for
мы записываем в цифровой форме элементы массива ledPins[] с высоким и низким уровнем напряжения, чтобы светодиоды включались и выключались. Но вместо того, чтобы использовать номер контакта в качестве первого аргумента каждой функции digitalWrite(), мы можем использовать массив ledPins[] с переменной j в квадратных скобках.
Таким образом, цикл for
будет начинаться с нулевого элемента массива ledPins[] (вывод 12), установит на нем высокий уровень напряжения, подождет 500 миллисекунд, затем установит на нем низкий уровень и подождет еще 500 миллисекунд. В следующем цикле цикла for
переменная j увеличится на единицу, поэтому код в теле цикла for
будет выполняться на первом элементе (вывод 11). Таким образом, на выводе 11 будут установлены высокий и низкий уровни в течение 500 миллисекунд.
Цикл for
продолжит цикл до пятого элемента, после чего Arduino выйдет из него и вернется к началу бесконечного цикла loop()
. В следующем цикле loop()
Arduino снова входит в цикл for
, снова последовательно мигая шестью светодиодами.
Двумерный массив в Arduino
До сих пор мы говорили об одномерных массивах, но есть и двумерные массивы. Одномерные массивы могут хранить только один список значений, а двумерные массивы могут хранить два списка.
Двумерные массивы обычно используются для программирования светодиодных матриц, матричных клавиатур и ЖК-дисплеев. Код для создания двумерного массива аналогичен созданию одномерного массива. Например, этот код объявит двумерный массив из шести элементов:
int twoDimArray[2][3] = { {1, 2, 3}, {4, 5, 6} };
Число в первом наборе квадратных скобок [2] определяет количество строк в массиве. Число во второй паре скобок [3] задает количество элементов в каждой строке. Итак, twoDimArray[2][3] определяет двумерный массив с двумя строками и тремя столбцами.
Элементы двумерного массива инициализируются внутри двух наборов фигурных скобок:
int twoDimArray[2][3] = { {1, 2, 3}, {4, 5, 6} };
Доступ к элементам двумерного массива аналогичен доступу к элементам одномерного массива. Как и одномерные массивы, двумерные массивы имеют нулевой индекс. Однако для доступа к элементу двумерного массива необходимо указать строку и столбец каждого элемента.
Например, чтобы получить доступ к первому элементу в двумерном массиве выше, используется этот код:
twoDimArray[0][0];
twoDimArray[][] можно использовать в качестве входных данных для Serial.print(), digitalWrite() или любой другой функции.
Например, чтобы вывести число шесть из приведенного выше массива на последовательный монитор, мы будем использовать следующий код.
Serial.print(twoDimArray[1][2]);
Надеюсь, эта статья поможет вам понять, как использовать массивы при программировании плат Arduino. Обязательно оставьте комментарий ниже, если у вас есть вопросы по какому-либо поводу!
Документация
Компоненты
- Arduino NANO
- Arduino UNO
- Arduino MEGA
- Набор выводных резисторов
- Наборы выводных светодиодов